我制作了一个简单的java聊天程序,它将拥有1个服务器和1个客户端。它在Windows上工作正常,它可以在局域网内相互聊天。 但是当我在Mac电脑上试用它时,它并不起作用。在服务器程序中,如果它正常工作,它应该在我按下开始按钮时冻结,并等待客户端加入。但是在Mac中,按下开始按钮时它什么也没做。程序没有冻结,就像点击非编码按钮一样。 Mac中的客户端也无法加入服务器(Windows中托管的服务器)。
在Windows上:启动服务器 - >冻结(等待客户) - >客户加入 - >能够聊天
在Mac上:启动服务器 - >不要冻结,比如点击普通按钮 - >客户点击加入 - >没有任何反应
在“启动服务器”按钮中:
private void startsvbtnActionPerformed(java.awt.event.ActionEvent evt) {
try {
// TODO add your handling code here:
server = new ServerSocket(7430);
client = server.accept();
System.out.println("Client request accepted: "+client.getOutputStream());
dos = new DataOutputStream(client.getOutputStream());
dis = new DataInputStream(client.getInputStream());
ReceiveMessage serverThread = new ReceiveMessage(dis,textarea);
serverThread.start();
} catch (IOException ex) {
System.out.println("No client available");
}
}
答案 0 :(得分:0)
因为你的按钮没有冻结,我会说问题是抛出异常,因此你的ActionListener几乎立即返回。
检查您的日志文件,看看您的日志消息System.out.println("No client available");
是否存在。另外至少修改此代码以输出堆栈跟踪,因为我敢打赌你不能绑定到这里指定的端口:
server = new ServerSocket(7430);
答案 1 :(得分:0)
您只检查IOException,根据doc,可能还有其他例外情况。抓住所有并打印堆栈跟踪。 http://docs.oracle.com/javase/8/docs/api/java/net/ServerSocket.html#accept--
catch(Exception e){
e.printStackTrace();
}