好的,所以我一直在为这个聊天编程以获得乐趣,并在我的路上遇到了一些问题。 我对套接字不太满意,有人可以帮忙连接它们吗?
Client.java:
try {
Socket server = new Socket("jakebobjo.com", 1234);
InputStream in = server.getInputStream();
OutputStream out = server.getOutputStream();
PrintWriter pout = new PrintWriter(out, true);
pout.println(username + ": " + input.getText() + "\n");
BufferedReader bin = new BufferedReader(new InputStreamReader(in));
String responce = bin.readLine();
server.close();
} catch (IOException ex) {
System.out.println("Error connection to host.");
}
Server.java:
try {
ServerSocket listener = new ServerSocket(1234);
Socket client = listener.accept();
InputStream in = client.getInputStream();
OutputStream out = client.getOutputStream();
PrintWriter pout = new PrintWriter(out, true);
pout.println(username + ": " + input.getText() + "\n");
client.close();
listener.close();
} catch (IOException ex) {
System.out.println("Error connecting to client.");
}
当程序触发idk时,程序会冻结:/
答案 0 :(得分:0)
你的程序正在冻结,因为在这两个文件中你已经要求应用程序向另一方发送消息而不接受任何一方的消息。序列应该像这两个中的任何一个:
客户端发送消息 - 服务器接收消息
或
服务器发送消息 - 客户端接收消息
。在你的情况下,没有一个序列跟随导致DeadLock并且你的应用程序被冻结。将客户端文件中的语句顺序更改为:
BufferedReader bin = new BufferedReader(new InputStreamReader(in));
String responce = bin.readLine();
pout.println(username + ": " + input.getText() + "\n");
注意:
2)首先启动服务器端程序,然后启动 客户端计划。
1)更多在服务器端,您已经关闭了套接字而没有收到客户端的消息。所以在客户收到消息之后 服务器,当它试图向服务器发送消息时,程序将停止投掷 异常。