0

好的,所以我一直在编写这个聊天的乐趣,并且在路上遇到了一些事情。我根本不擅长套接字,有人可以帮忙连接这些吗?

客户端.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.");
} 

服务器.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 为什么时,程序就会冻结:/

4

1 回答 1

0

您的程序正在冻结,因为在这两个文件中您已要求应用程序将消息发送到另一端而不接受任何一方的消息。顺序应该像这两个中的任何一个:

客户端发送消息 - 服务器接收消息

或者

服务器发送消息 - 客户端收到消息

.在您的情况下,没有任何顺序会导致死锁并且您的应用程序被冻结。将客户端文件中的语句顺序更改为:

BufferedReader bin = new BufferedReader(new InputStreamReader(in));
String responce = bin.readLine();
pout.println(username + ": " + input.getText() + "\n");

注意:
2)先启动Server端程序,再启动Client端程序。
1)MoreOver 在服务器端你已经关闭了套接字而没有收到来自客户端的消息。因此,客户端从服务器接收到消息后,当它尝试向服务器发送消息时,程序将停止抛出异常。

于 2013-01-16T08:33:08.580 回答