【问题标题】:communication between winsock and java socketwinsock和java socket之间的通信
【发布时间】: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 套接字。

标签: java c++ sockets winsock


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2013-03-04
    • 1970-01-01
    • 1970-01-01
    • 2014-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-24
    • 1970-01-01
    相关资源
    最近更新 更多