Сделать нормальный выход из чата с++

205
04 июля 2017, 23:07

Когда один из клиентов чата закрывает чат(закрывает приложение) на сервере начинает лагать его последнее сообщение(отправляться много раз) Тобеж не происходит выход из 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;
}
READ ALSO
SFML SocketSelector::wait() некорректно работает

SFML SocketSelector::wait() некорректно работает

Делаю небольшой мессенджер (протокол TCP)Есть сервер и клиент

233
Возможно ли русифицировать Dev Tools Chrome?

Возможно ли русифицировать Dev Tools Chrome?

Как можно русифицировать инструменты разработчика (Dev Tools) в браузере Chrome?

302
Ошибка компилятора C++

Ошибка компилятора C++

Ошибка C1091 ограничение компилятора: длина строки превышает 65535 байт

289