現在、私はC++でクライアントサーバーコンソールアプリケーションを作成しています。 winsock2.h
ライブラリーとUDPプロトコルを使用すると、sendto
とrecvfrom
を使用して、メッセージをクライアントからサーバーに送信し、別のクライアントにメッセージを送信します。クライアント1がクライアント2、クライアント2 client1にメッセージを送信しようとするまで、メッセージは受信されません。私は、プログラムがインスタントメッセンジャーのように動作するようにしています。そのため、client1がclient2にメッセージを送信すると、最初にメッセージを送信することなく、すぐにclient2がメッセージを受信します。同期チャットプログラムを同期してメッセージを送受信する方法は?
また、client1がclient2にメッセージを送信する場合、client1が最初のメッセージに返信していない限り、client1は別のメッセージを送信できません。
さらに詳しい情報が必要な場合や、いくつかのコードを表示する必要がある場合は、尋ねてください。
センドコード:
while(getline(cin, line))
{
// send a string to the server.
sendto(hSocket, line.c_str(), line.size(), 0,
reinterpret_cast<sockaddr*>(&serverAddress),
sizeof(serverAddress));
// recieve the response.
int n = recvfrom(hSocket, recvLine, MAXLINE, 0, NULL, NULL);
if(n == -1)
{
cout << "no reply" << endl;
}
else
{
recvLine[n] = 0;
string const terminateMsg = "server exit";
string msg = recvLine;
if(msg == terminateMsg)
{
cout << "Server terminated" << endl;
break;
}
cout << n << ": " << recvLine << endl;
}
}
[Boost.ASIO](http://www.boost.org/libs/asio/)を参照してください。この正確なシナリオでは、[例](http://www.boost.org/doc/html/boost_asio/examples.html#boost_asio.example.chat)が付属しています。 – ildjarn
@ildjarnありがとう、それらの例は私が欲しいものですが、私はwinsockライブラリに固執することを好むでしょう – Beef
あなたはもっと(非常に醜い)作業中です。 ; - ] – ildjarn