这是我从未想过的问题。我问了很多人,他们甚至都不知道。无论如何,让我们来解决问题。这是我试图做的......创建一个客户端和一个服务器。客户端连接到服务器,并每隔3分钟向其发送一条消息(我减少了测试时间)。但是必须有两个独立的线程(一个用于客户端和服务器)。我发现的是,客户端将继续发送消息,但服务器将不再侦听端口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();
}
}
如果有人能告诉我出了什么问题,我会非常感激,因为老实说我没有任何线索。
答案 0 :(得分:0)
在Server类的while
循环中写下两行,它将适合您。
final Socket test = server.accept();
BufferedReader reader = new BufferedReader(new InputStreamReader(test.getInputStream()));
您的代码中发生了什么:服务器将在每次完成while循环后等待新客户端,但是没有客户端将在该实例上与服务器连接。因此,服务器将等待,直到新客户端到来,服务器将接受该新客户端并继续其处理。
答案 1 :(得分:0)
您是循环堆栈,请在消息后尝试关闭客户端中的连接。
答案 2 :(得分:0)