現在、C++ でクライアント サーバー コンソール アプリケーションを作成しています。winsock2.h
ライブラリと UDP プロトコルを使用して、とsendto
を使用recvfrom
してクライアントからサーバーにメッセージを文字列として送信し、サーバーはそのメッセージを別のクライアントに送信します。現在、client1 が client2 にメッセージを送信すると、client2 は受信しません。 client1 にメッセージを送信しようとするまで、メッセージを送信しません。client1 が client2 にメッセージを送信すると、client2 は最初にメッセージを送信しなくてもほぼ即座にメッセージを受信できるように、プログラムをインスタント メッセンジャーのように動作させたいと考えています。
また、client1 が client2 にメッセージを送信する場合、client2 が最初のメッセージに応答しない限り、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;
}
}