Javaアプリケーションから接続する非常に単純なC++サーバーを作成しました。C++サーバーはwinsock2を使用します。UTF8でエンコードされた番号をクライアントからサーバーに送信しています。これらの番号を受信したら、サーバーにアクションを実行してもらいます。しかし、私のサーバーは一連の番号を1つとして受信しているようです。現在、サーバーは1ミリ秒ごとに新しいメッセージをリッスンしています。
これは、メッセージを受信する私のC++サーバーコードです。
bool receive()
{
char buffer[1024];
int inDataLength=recv(Socket,buffer,sizeof(buffer),0);
if(buffer[0] != '\0')
{
std::cout<<"Client: ";
std::cout << buffer;
sendKey(string(buffer));
}
else if (inDataLength == 0) //Properly closed connection
{
std::cout<<"Connection lost..\r\n";
return false;
}
return true;
}
これは、次のようにループ内で呼び出されます。
while ( receive() )
{
Sleep(1);
}
これは、メッセージを送信するためのJavaクライアントコードです。OutputStream = socket.getOutputStream():
public void send(String msg)
{
try {
out.write( msg.getBytes("UTF8") );
out.flush();
Thread.sleep(100);
} catch (SocketException e) {
Global.error("Connection error..");
//e.printStackTrace();
} catch (UnsupportedEncodingException e) {
} catch (IOException e) {
Global.error("Never connected..\r\n");
} catch (Exception e)
{ Global.error("Sending failed..\r\n"); }
}
私が得ているのは、たとえば1、2、12、121などの番号を特定のパターンで受信しているサーバーです。ただし、サーバーが一度に2つの番号を受信すると、1つだけを受信し始めることはありません。これは私のJavaコードでサーバーに何かが送信される唯一の場所であり、各メッセージの後にバッファーをフラッシュするので、問題はサーバーにあると思いますが、問題については途方に暮れています。
どんな助けでも大歓迎です。
ありがとう。