【发布时间】:2013-09-06 02:56:59
【问题描述】:
所以我用java创建了一个基本的客户端-服务器程序。开头是这样的:
- 客户端连接到服务器
- 服务器询问客户名称
- 客户端以名称响应
- 服务器迎接客户端
- 此后,客户端说话,服务器重复的话
我使用this tutorial 可以轻松完成这项工作。每当我尝试介绍多个客户时,问题就会出现。我认为它会起作用,因为我正在使用多个线程,但是,第二个客户端只是挂起,直到第一个客户端退出然后它开始工作(服务器确实接受来自第二个客户端的输入,但它没有响应直到第一个客户退出为止)。
这是我正在使用的代码:
import java.net.*;
import java.io.*;
public class Server extends Thread {
private ServerSocket listener;
public Server(int port) throws IOException {
listener = new ServerSocket(port);
}
public void run() {
while(true) {
try {
Socket server = listener.accept();
DataOutputStream out = new DataOutputStream(server.getOutputStream());
out.writeUTF("What is your name?");
DataInputStream in = new DataInputStream(server.getInputStream());
String user_name = in.readUTF();
out.writeUTF("Hello "+user_name);
while(true) {
String client_message = in.readUTF();
out.writeUTF(client_message);
}
}
catch(IOException e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) {
int port = 6006;
try {
Thread t = new Server(port);
t.start();
} catch(IOException e) {
e.printStackTrace();
}
}
}
谁能解释我做错了什么?
我已经查看了使用 Runnable 而不是 Extends Thread,但在那里我遇到了更多问题,所以我想先尝试使用它。
【问题讨论】:
-
这里没有多线程。
-
listener.accept() 之后的所有内容都需要位于扩展线程或实现可运行的不同类中。然后,您此时启动该线程,然后您的循环将接受下一个连接
标签: java multithreading sockets