サーバー スレッドとクライアント スレッドを同じプロセスで起動しようとしていますが、サーバー スレッドがクライアント スレッドをブロックしているようです (またはその逆)。これらのスレッド間でグローバル変数を使用することは許可されていません (クライアントとサーバー スレッドは、私がアクセスできない上位クラスによって起動されるため、セマフォやミューテックスなど)。
ここで同様の質問を見つけましたが、それでも 2 つの異なるプロセス (2 つの主な機能) を使用しています。
ここに私のコードのサンプルがあります
サーバーコード:
public class MyServer implements Runnable{
ServerSocket server;
Socket client;
PrintWriter out;
BufferedReader in;
public MyServer() throws IOException{
server = new ServerSocket(15243, 0, InetAddress.getByName("localhost"));
}
@Override
public void run() {
while(true){
try {
ArrayList<String> toSend = new ArrayList<String>();
System.out.println("I'll wait for the client");
client = server.accept();
out = new PrintWriter(client.getOutputStream(), true);
in = new BufferedReader(new InputStreamReader(client.getInputStream()));
String inputLine;
while((inputLine = in.readLine()) != null){
toSend.add("answering : "+inputLine);
}
for(String resp : toSend){
out.println(resp);
}
client.close();
out.close();
in.close();
} catch (IOException ex) {
}
}
}
}
そしてクライアントコード:
public class MyClient implements Runnable{
Socket socket;
PrintWriter out;
BufferedReader in;
public MyClient(){
}
@Override
public void run() {
int nbrTry = 0;
while(true){
try {
System.out.println("try number "+nbrTry);
socket = new Socket(InetAddress.getByName("localhost"), 15243);
out = new PrintWriter(socket.getOutputStream(), true);
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
out.println("Hello "+nbrTry+" !! ");
String inputLine;
while((inputLine = in.readLine()) != null){
System.out.println(inputLine);
}
nbrTry++;
} catch (UnknownHostException ex) {
} catch (IOException ex) {
}
}
}
}
そして、それらのスレッドを立ち上げたと思われる上流階級:
public class TestIt {
public static void main(String[] argv) throws IOException{
MyServer server = new MyServer();
MyClient client = new MyClient();
(new Thread(server)).start();
(new Thread(client)).start();
}
}
出力として私に与えます:
I'll wait for the client
Try number 0
そして、ここで固まりました。サーバー コードとクライアント コードの両方を実行し続けるにはどうすればよいですか? ありがとうございました。