-1

TCP サーバーとクライアントのペアがあります。クライアントには、サーバーからのデータを処理するためのスレッドがあります。問題は、最初のデータがサーバーから受信される前に、バッファ リーダーがブロックされることです。しかし、最初のデータが受信されると、有用なデータの間に 0 を送信し続けます。誰かが理由を知っていますか?そして、これを解決する方法は?

    connection = new Socket(ip, port);
    output = new DataOutputStream(connection.getOutputStream());
    input = new BufferedReader(new InputStreamReader(connection.getInputStream()));

この部分は 0 を処理するように変更されていますが、これは理想的ではありません。

 try {
                opcode = (char) input.read();
            } catch (IOException ex) {
                ErrorFrame erfframe = new ErrorFrame("De verbinding is verbroken voordat we de opcode van het packet konden lezen", "Herverbinden", IRIGui.ConnectionType);
            }
            System.out.println("Data received!!" + opcode);
            int opcodenr = Character.getNumericValue(opcode);
            char sensortype = '0';
            try {
                do {
                    sensortype = (char) input.read();
                } while (sensortype == 0);

            } catch (IOException ex) {
                ErrorFrame erfframe = new ErrorFrame("De verbinding is verbroken voordat we de sensortype van het packet konden lezen", "Herverbinden", IRIGui.ConnectionType);
            }

サーバーコード:

public static void main(String argv[]) throws Exception { ServerSocket welcomeSocket = new ServerSocket(25566);

while (true) {
    Socket connectionSocket = welcomeSocket.accept();
    BufferedReader inFromClient =
            new BufferedReader(new InputStreamReader(connectionSocket.getInputStream()));
    DataOutputStream outToClient = new DataOutputStream(connectionSocket.getOutputStream());
    int request = inFromClient.read();
    System.out.println("erjioejfioe " + request);
    if (request == 4) {
        outToClient.writeBytes("41");
        outToClient.write(5);
        outToClient.writeInt(5);
        outToClient.writeInt(3);
        outToClient.writeInt(6);
        outToClient.writeInt(5);
        outToClient.writeInt(1);
    }
    request = 0;
    request = inFromClient.read();
    System.out.println("erjioejfioe " + request);
    if (request == 4) {
        System.out.println("SENDING THE SHIT");
        outToClient.writeBytes("41");
        outToClient.write(5);
        outToClient.writeInt(3);
        outToClient.writeInt(7);
        outToClient.writeInt(2);
        outToClient.writeInt(4);
        outToClient.writeInt(3);
        System.out.println("We get here!!");
    }
    break;
}

}

4

1 に答える 1