Winsock只在程序关闭时发送数据
我有一个c ++ / windows程序,它通过WM_COPYDATA消息从另一个c ++程序接收数据。 然后应该使用Sockets / winsock将此消息发送到用Java编写的服务器。 客户端连接到服务器很好,但它似乎无法及时发送消息。 但是,一旦客户端关闭,它应该发送的所有消息都会被一次性发送。 以下是Java服务器的终端输出示例:
Server Starting up. Client Accepted. hi from clienttesttesttesttesttesttesttesttesttesttesttesttesttesttest
当这些事件发生时,前两行由Java服务器输出。 最后一行是来自客户端的消息。 客户端在winsock初始化后立即发送“hi from client”,然后在程序后面的各个点“测试”,因为它通过WM_COPYDATA消息从其他c ++程序接收数据。
这是Java服务器代码:
BufferedReader in = new BufferedReader(new InputStreamReader( clientSocket.getInputStream())); String incomingLine; while((incomingLine = in.readLine()) != null) System.out.println(incomingLine);
这是发送消息的c ++函数:
void sendDataWinsock(char* text){ int result = send(ConnectSocket,text,(int)strlen(text),0); }
这里是WndProc的一部分,其中处理WM_COPYDATA消息:
case WM_COPYDATA: sendDataWinsock("test"); break;
有谁知道它为什么这样做? 就好像客户端程序将所有这些消息添加到它应该发送的事物的队列中,但是太忙而无法立即发送它们,因此只在程序关闭时才发送它们,当它不再需要处理时Windows消息。 或者,我想,错误实际上可能在Java代码中 – 我对此很新。
您正在阅读服务器上的行,但您没有发送行。
这意味着你的服务器坐在那里,接收数据但是等待从readLine()
返回一行文本回到你的程序,这不会发生,因为没有新行, \n
,被发送。 当客户端退出时,readLine()会返回它到目前为止读取的数据。