これは私が決して理解できなかった問題です。多くの人に聞いたのですが、彼らも知りません。とにかく、問題に取り掛かりましょう。これが私がやろうとしたことです... クライアントとサーバーを作成します。クライアントはサーバーに接続し、3 分ごとにメッセージを送信します (テストの時間を短縮しました)。ただし、2 つの独立したスレッド (クライアントとサーバー用に 1 つ) が必要です。私が見つけたのは、クライアントは引き続きメッセージを送信しますが、サーバーはポート 1234 をリッスンしなくなるということです。
クライアント:
import java.io.PrintWriter;
import java.net.Socket;
public class Client {
public Client(){
startClient();
}
public void startClient(){
new Thread(new Runnable(){
@Override
public synchronized void run(){
try{
Socket sendChat = new Socket("localhost", 1234);
PrintWriter writer = new PrintWriter(sendChat.getOutputStream());
while(true){
Thread.sleep(1000); // normally 180000
writer.println("Hello Server!");
}
}catch(Exception err){
err.printStackTrace();
}
}
}).start();
}
}
サーバ:
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Date;
public class Server {
public Server(){
startServer();
}
public void startServer(){
new Thread(new Runnable(){
@Override
public synchronized void run(){
try{
@SuppressWarnings("resource")
ServerSocket server = new ServerSocket(1234);
while(true){
final Socket test = server.accept();
BufferedReader reader = new BufferedReader(new InputStreamReader(test.getInputStream()));
while(!test.isClosed()) {
Date date = new Date();
System.out.println("Server got message from client " + date);
}
reader.close();
}
}catch(Exception err){
err.printStackTrace();
}
}
}).start();
}
}
始める:
public class Start {
public static void main(String[] args){
new Server();
new Client();
}
}
私は正直なところ手がかりがないので、誰かが何が間違っているのか教えていただければ幸いです。