サーバーとクライアントがあります。サーバーは複数のリクエストを処理できます。クライアントはソケットを開き、バイト ストリームを送信します。サーバーの処理中は、正しく動作していません。クライアントから次の行を送信しています
これをクライアントとして追加します
タイトル: クライアント1
5 つの異なるクライアントの場合
上記のように、文字列ビルダーを使用してフォーマットされた文字列を作成しています。
for (i=0; i<6; i++)
{
Socket socket = new Socket(host, port);
StringBuilder sb = new StringBuilder();
sb.append("ADD this as your client ");
sb.append("\r\n");
sb.append("Title: Client");
sb.append(i);
sb.append("\r\n");
String ToSend = sb.toString();
/// New Additions
byte[] byteArray = ToSend.getBytes();
OutputStream os = socket.getOutputStream();
DataOutputStream dos = new DataOutputStream(os);
dos.writeInt(byteArray.length);
dos.write(byteArray,0,byteArray.length);
socket.close();
}
サーバーでは、このように読んでいます。
public static void main(String[] args) {
Sampleserver file_rec = new Sampleserver();
try {
ServerSocket listener = new ServerSocket(port);
while (true) {
file_rec.socket = listener.accept();
new Thread(file_rec).start();
}
}
catch (java.lang.Exception ex) {
ex.printStackTrace(System.out);
}
}
public void run() {
try {
InputStream is = socket.getInputStream();
DataInputStream dis = new DataInputStream(is);
int length = dis.readInt();
System.out.println("Length value is " + length);
byte[] mybytearray = new byte[length];
int bytesRead = is.read(mybytearray, 0, length);
String s = new String(mybytearray, 0, length);
System.out.println(s);
if (s.contains("ADD"))
{
System.out.println("Inside ADD. ");
}
else
{
System.out.println("Default ");
}
}
catch (java.lang.Exception ex) {
ex.printStackTrace(System.out);
}
}
しかし、サーバーで毎回奇妙な出力が得られます。スレッド環境で(runメソッドで)処理しているときに、サーバーでbytearrayを適切に処理しているか、間違って処理していると思います。どこが間違っているのか教えてください。