Когда один из клиентов чата закрывает чат(закрывает приложение) на сервере начинает лагать его последнее сообщение(отправляться много раз) Тобеж не происходит выход из while() (строка 74)
Вот сервер:
#include < iostream >
#pragma comment( lib, "ws2_32.lib" )
#include < Windows.h >
#include < conio.h >
using namespace std;
#define HELLO "Welcome to our chat"
#define MY_PORT 666
char buff[1024];
int nclients = 0;
DWORD WINAPI WorkWithClient(LPVOID client_socket);
int main() {
//серверный сокет
SOCKET mysocket;
sockaddr_in local_addr;
if (WSAStartup(0x0202, (WSADATA *)&buff[0])) { printf("Error WSAStartup
%d\n", WSAGetLastError()); }
if ((mysocket = socket(AF_INET, SOCK_STREAM, 0))<0) { printf("Error socket
%d\n", WSAGetLastError()); WSACleanup(); }
local_addr.sin_family = AF_INET;
local_addr.sin_port = htons(MY_PORT);
local_addr.sin_addr.s_addr = 0;
if (bind(mysocket, (sockaddr *)&local_addr, sizeof(local_addr))) {
printf("Error bind %d\n", WSAGetLastError());
closesocket(mysocket);
WSACleanup();
}
if (listen(mysocket, 20)) {
printf("Error listen %d\n", WSAGetLastError());
closesocket(mysocket);
WSACleanup();
}
//Клиентский сокет
SOCKET client_socket;
struct sockaddr_in clinfo;
/////////////////////////
/////////////////////////
printf("Waiting for connection\n");
while (client_socket = accept(mysocket,NULL,NULL))
{
nclients++;
// вывод сведений о клиенте
cout << "New connection: " << endl;
DWORD thID;
CreateThread(NULL, NULL, WorkWithClient,&client_socket, NULL, &thID);
}
printf("Error: %d\n", WSAGetLastError());
cin.get();
return 0;
}
DWORD WINAPI WorkWithClient(LPVOID client_socket) {
char nick[128];
int bytes_recv;
SOCKET my_sock;
my_sock = ((SOCKET *)client_socket)[0];
send(my_sock, HELLO, sizeof(HELLO), 0);
while (1)
{
bytes_recv = recv(my_sock, buff, sizeof(buff), 0);
send(my_sock, &buff[0], bytes_recv, 0);
if (!strcmp(&buff[0], "quit\n")) {
break;
} else if (!strcmp(&buff[0], "list\n")) {
} else { cout << buff << std::endl; }
}
nclients--;
printf("%d: disconnected", nick);
closesocket(my_sock);
return 0;
}
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Делаю небольшой мессенджер (протокол TCP)Есть сервер и клиент
Как можно русифицировать инструменты разработчика (Dev Tools) в браузере Chrome?