我编写了一个非常简单的 C++ 服务器,我从 Java 应用程序连接到它。C++ 服务器使用winsock2。我正在从我的客户端向服务器发送 UTF8 编码的数字,并且在收到这些数字后,我希望服务器执行一个操作。但是,我的服务器似乎正在接收一系列数字。目前,我让服务器每 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 客户端代码,用于在 out 处发送消息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 个数字,它永远不会再开始只接收一个。这是我的 java 代码中唯一将任何内容发送到服务器的地方,并且我在每条消息后刷新缓冲区,所以我认为问题出在我的服务器上,但我对这个问题感到茫然。
任何帮助将非常感激。
谢谢。