所以我正在构建一个小型聊天应用程序,但我在设置服务器时遇到了一些麻烦。下面的代码是我的服务器线程中的构造函数:
public ServerThread() {
System.out.println("Before");
try {
ServerSocket serverSocket = new ServerSocket(3500);
socket = serverSocket.accept();
System.out.println("After");
outputStream = new ObjectOutputStream(socket.getOutputStream());
inputStream = new ObjectInputStream(socket.getInputStream());
} catch (Exception e) {
e.printStackTrace();
}
executor = Executors.newFixedThreadPool(3);
connected = true;
}
正如你所看到我有两个打印,“之前”和“之后。在这两个之间,会发生一些导致程序进入无限循环的事情。socket = serverSocket.accept();
我也无法捕捉到异常。确定这里有什么问题。
答案 0 :(得分:0)
(我还不能发表评论)但是accept()会阻止,直到建立连接。它也不是一个无限循环,只是该方法将阻塞,直到连接到该套接字。
您确定您的客户端连接正常吗?
答案 1 :(得分:0)
ServerSocket - “服务器套接字等待通过网络进入的请求”。它根据该请求执行某些操作,然后可能将结果返回给请求者。
所以这里接受()是阻止通话。 ie-系统将等待客户端请求,遇到它时会产生相应的响应(作为 - 为每个传入的请求分配新端口并执行给定的操作)
那你怎么看看呢?
尝试创建客户端类并将其与Server应用程序连接。即 -
socket = new Socket(<serverName/host/ip>, <serverPort>);
System.out.println("Connected: " + socket);
当服务器运行时,尝试运行给定的代码,它将发送请求,服务器将相应地处理它。 希望它有所帮助:)