0

が文字列を に送信し、がその文字列をファイルに保存する、非常に単純なClient-Serverシステムを機能させようとしています。ClientServerserver

クライアントは次の方法で文字列を送信します。

//Other Code

sockStrm = new DataOutputStream (clientSocket.getOutputStream ());

//Other code

sockStrm.writeChars (line);

//Other code

サーバーは次の文字列を受け取ります。

//Other code 

strm = new BufferedReader (new InputStreamReader (clientSocket.getInputStream ())); 

//Other code

stringLine = strm.readLine (); 

//Other code

string を送信するとSTOP、クライアント側の文字列の長さは 4 で、サーバー側の文字列の長さは 9 で、次のように表示されます。STOP

サーバー側で受信した文字列を部分文字列にしようとしましたが、運が悪かったです。

これに対処する方法についての指針はありますか?

4

1 に答える 1

3

対称的な方法を使用します。

DataOutputStream sockStrm =...
sockStrm.writeUTF(str);

DataInputStream sockStrm = ...
String str = sockStrm.readUTF();

writeChars は、個々の文字を 2 バイト値として書き込みます。リーダーはエンコーディングに従って、一連のバイトから文字列を再構築します。これは、各文字コードの上位バイト-下位バイトには絶対に準拠していません。したがって、元の下位バイト値でゼロバイトのミッシュマッシュが得られるため、元の文字列値を垣間見ることができます。\x00 を使用して NULL バイトを示す:

S-T-O-P => on the line: \x00-S-\x00-T-\x00-O-\x00-P => prints as STOP

着信文字列の文字をループして、整数値 (str.charAt(i)) を表示し、上記を確認してください。

于 2015-02-10T07:14:20.550 に答える