winsock和java socket之间的通信

时间:2012-12-30 13:58:33

标签: java c++ sockets winsock

我正在尝试构建一个客户端/服务器应用程序,其中一个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()的组合才会导致问题。

1 个答案:

答案 0 :(得分:3)

使用readLine()时常见的错误是忘记发送一行文字

我会检查你发了换行符。例如\n