2

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()問題は、接続が成功した後、関数が1で返されるにもかかわらず、サーバーがハングアップsend()することです。これは、データの送信が成功したことを意味します。

クライアントの一部を削除するrecv()と、すべてが正しく機能します。したがって、それはとの組み合わせだけで問題send()recv()引き起こしているようです。

4

1 に答える 1

3

readLine()を使用する際のよくある間違いは、1行のテキストを送信するのを忘れることです。

改行を送信したことを確認します。例えば\n

于 2012-12-30T14:00:49.860 に答える