У меня есть простой (очень простой :)) клиент и сервер, который может отправлять текстовые сообщения через TCP. Это некорректно, потому что я не знаю, как слушать сообщения и печатать их на экране, а также отправлять сообщения на одновременно (как для клиента, так и для сервера).
Также мне сложно представить все отправленные и полученные сообщения между клиентом и сервером в порядке отправки сообщений .
Например, на стороне server чат может выглядеть следующим образом
Server:Hi there
Client:Hi
А на стороне клиента тот же чат выглядит так
Client:Hi
Server:Hi there
Сообщения расположены в другом порядке, и оба пользователя видят их по-разному. Мой главный вопрос , как мне синхронизировать вывод, чтобы они оба видели одно и то же?
Помня о том, что я упоминал ранее о том, что не знаю, как слушать и отправлять одновременно, это цикл сообщений для сервера и клиента.
Цикл сообщений сервера
while(true){
cout<<"-[SERVER]: ";
getline(cin,send_text);
if (sizeof(send_text) > 0 ){
bytes_out = send(client,send_text.c_str(),send_text.length()+1,0);
cout<< endl;
if (bytes_out == SOCKET_ERROR){
cout<<"-[SERVER error in sending.]" << endl;
break;
}
}
bytes_in = recv(client,recvd_text,sizeof(recvd_text),0);
if (bytes_in > 0 ){
cout<<"-[CLIENT]: " << recvd_text << endl; //output on screen
}
if (bytes_in == 0){
cout<<"-[CLIENT has disconnected.]" << endl;
break;
}
if (bytes_in == SOCKET_ERROR){
cout<<"-[CLIENT closed unexpectedly.]" << endl;
break;
}
}
Цикл сообщений клиента
while (true){
cout<<"-[CLIENT]: ";
getline(cin,send_text);
if(sizeof(send_text) > 0){
bytes_out = send(con_sock,send_text.c_str(),send_text.length()+1,0);
if (bytes_out == SOCKET_ERROR){
cout<<"-[CLIENT error in sending.]" << endl;
break;
}
}
bytes_in = recv(con_sock,recvd_text,sizeof(recvd_text),0);
if (bytes_in > 0){
cout<<"-[SERVER]: " << recvd_text << endl;
}
if (bytes_in == 0){
cout<<"-[Server has disconnected." << endl;
break;
}
if (bytes_in == SOCKET_ERROR){
cout<<"-[Server closed unexpectedly." << endl;
break;
}
}
return true;