1

クライアントがサーバーにメッセージを書き込み、サーバーがそれを文字列として保存してコンソールに出力するサーバークライアントシステムを作成しています。しかし、システムが行を読み取ろうとすると、コンソールに「PrintStream エラー」が表示されます。エラーも何もありません。サーバー上で次の文字列を読み取っています。

DataInputStream inFromClient = new DataInputStream(socket.getInputStream());
String connectReason = inFromClient.readUTF();

そして、次のようにクライアントから文字列を送信しています。

clientSocket = new TcpClient(Host, Port);
Stream = clientSocket.GetStream(); 
outToServer = new StreamWriter(Stream);

なぜそのエラーが発生するのですか? それらはエラーなしで接続し、その行に到達すると「PrintStreamエラー」が発生します。

4

1 に答える 1

0

メソッドは、データが特定のreadUTF()方法 (詳細はこちら) でフォーマットされていることを想定しています。プログラムのように見えるものによって送信されたデータC#は、メソッドによって正しく解釈できる方法でフォーマットされていませんreadUTF()

ソケットの入力ストリームから生のバイトを読み取り、それらを に変換できます。次にString例を示します。

try(InputStream in = socket.getInputStream()){
     byte[] b = new byte[1024];
     String msg = "";
     for(int r;(r = in.read(b,0,b.length))!=-1;){
        msg += new String(b,0,r,"UTF-8");
     }
     System.out.println("Message from the client: " + msg);
}catch (Exception e) {
    e.printStackTrace();
}

「UTF-8」をC#プログラムが使用する文字セットに置き換えます。

于 2015-06-05T01:48:28.283 に答える