【发布时间】:2010-03-10 14:15:06
【问题描述】:
我有一个 c++/windows 程序,它通过 WM_COPYDATA 消息从另一个 c++ 程序接收数据。然后应该使用 Sockets/winsock 将此消息发送到用 Java 编写的服务器。客户端可以正常连接到服务器,但似乎无法及时发送消息。但是,一旦客户端关闭,它应该发送的所有消息都会一大堆发送。下面是 Java 服务器的终端输出示例:
Server Starting up.
Client Accepted.
hi from clienttesttesttesttesttesttesttesttesttesttesttesttesttesttest
当这些事件发生时,Java 服务器会输出前两行。最后一行是来自客户端的消息。客户端在 winsock 初始化后立即发送“来自客户端的 hi”,然后在程序稍后的各个点“测试”,因为它通过 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);
}
这是处理 WM_COPYDATA 消息的 WndProc 的一部分:
case WM_COPYDATA:
sendDataWinsock("test");
break;
有谁知道它为什么这样做?就好像客户端程序正在将所有这些消息添加到它应该发送的队列中,但由于太忙而无法立即发送它们,因此仅在程序关闭时才发送它们,此时它不再需要处理Windows 消息。或者,我想,错误实际上可能出在 Java 代码中——我对此很陌生。
【问题讨论】: