【发布时间】:2012-12-30 22:17:33
【问题描述】:
我正在尝试构建一个客户端/服务器应用程序,其中一个是 java server,另一边是 c++ client。
客户:
while(true)
{
sock = con.connectToServer(argv[2], port);
if(sock!=NULL)
{
_itoa_s(clientID,sendBuffer,16,10);
send(sock,sendBuffer,strlen(sendBuffer),0);
printf("waiting for response\n");
bytes = recv(sock,recvBuffer,sizeof(recvBuffer)-1,0);
recvBuffer[bytes] = '\0';
printf("%s",recvBuffer);
closesocket(sock);
}
Sleep(3000);
}
服务器线程:
public void run()
{
try{
in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
out = new BufferedWriter (new OutputStreamWriter(clientSocket.getOutputStream()));
int signID = Integer.parseInt(in.readLine());
System.out.println("signID: " + signID);
//Precessing DataRequest for specific TrafficSign here
clientSocket.close();
}
catch(Exception ex){
System.out.println("Exception in TrafficSignServerThread -> " + ex.toString());
}
}
问题是,连接成功后,服务器在in.ReadLine()挂断,虽然send()函数返回1,表示发送数据成功。
如果我删除客户端的recv() 部分,一切正常。所以似乎只有send() 和recv() 的组合会导致问题。
【问题讨论】:
-
请注意,这不一定是“Winsock 和 Java 套接字之间的通信”。在 Windows 上,每个套接字都是一个 Winsock 套接字,包括 Java 套接字。