私はサーバーとクライアントのコードを持っています。私のサーバーでは、接続と2つのスレッド(現在は2つのクライアント)を作成するのを待っています。ここに私のサーバーコードのスニペットがあります。Javaネットワーキングでスレッドに異なる値を渡す?
while (true) {
try {
Socket client = server.accept();
int i;
for (i = 0; i < 2; i++) {
if(threads[i] == null) {
(threads[i] = new ClientThread(client, threads, i + 1)).start();
break;
}
}
if(i == 2) {
PrintStream os = new PrintStream(client.getOutputStream());
os.println("Server too busy. Try later.");
os.close();
client.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
私のClientThreadクラスでは、このコンストラクタとメソッドを実行しています。
public ClientThread(Socket sock, ClientThread[] threads, int count) {
this.clientSocket = sock;
this.threads = threads;
this.count = count;
} // end constructor
public void run() {
ClientThread[] threads = this.threads;
try {
is = new DataInputStream(clientSocket.getInputStream());
os = new DataOutputStream(clientSocket.getOutputStream());
os.writeUTF("Hello client"+count);
System.out.println("Client sent =>"+ is.readUTF());
} catch (IOException e) {
e.printStackTrace();
}
for (int i = 0; i < 2; i++) {
if (threads[i] == this) {
threads[i] = null;
}
}
try {
is.close();
os.close();
clientSocket.close();
} catch (IOException e) {
e.printStackTrace();
}
} // end run method
私はサーバーを実行しています。クライアントが接続されると、クライアントはいくつかの文字列を(countとともに)受け取って、これが出力されます。今度は別のクライアントが接続し、増分カウントを取得する必要があります。しかし、私は自分のコードを実行すると、サーバーが起動し、2つのクライアントを実行しても、最初のクライアントでは1、2番目のクライアントでは2の代わりに、カウントに対応する出力は1になります。 どこが間違っていますか?
編集: クライアントは、単純なソケットコードで、utfを読み込んでutfに書き込みます。それでおしまい。