У меня есть программа на c ++ / windows, которая получает данные от другой программы на c ++ через сообщение WM_COPYDATA. Затем предполагается использовать Sockets / winsock для отправки этого сообщения на сервер, написанный на Java. Клиент нормально подключается к серверу, но, похоже, не может своевременно отправлять сообщения. Однако после закрытия клиента все сообщения, которые он должен был отправлять, отправляются в один большой кусок. Вот пример вывода терминала сервера Java:
Server Starting up.
Client Accepted.
hi from clienttesttesttesttesttesttesttesttesttesttesttesttesttesttest
первые две строки выводятся сервером Java при возникновении этих событий. Последняя строка - это сообщения от клиента. Клиент отправляет «привет от клиента» сразу после инициализации winsock, а затем «тестирует» в различных точках позже в программе, так как он получает данные от другой программы на С ++ через сообщения WM_COPYDATA.
Вот код сервера 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 - я довольно новичок в этом.