小编典典

Winsock仅在程序关闭时发送数据

java

我有一个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代码中-
我对此很陌生。


阅读 189

收藏
2020-11-26

共1个答案

小编典典

您正在读取服务器上的线路,但未发送线路。

这意味着您的服务器坐在那里,正在接收数据,但等待从中返回一行文本到您的程序readLine(),因为没有\n发送任何换行符,这不会发生。当客户端退出时,readLine()会返回您到目前为止已读取的数据。

2020-11-26