当我将套接字传递给构造函数时,我正在尝试使用ArrayList并使用.add用套接字填充它。当我运行调试时,看起来只有1个套接字填充了ArrayList,而且没有更多,即使我已经打开了6个客户端线程。
服务器类
public static void main(String[] args) throws IOException
{
final int PORT = 8888;
ServerSocket server = new ServerSocket(PORT);
System.out.println("Waiting...");
while(true)
{
Socket s = server.accept();
System.out.println("Client connected");
Service service = new Service(s);
Thread t = new Thread(service);
t.start();
}
服务类
public class Service implements Runnable
{
private Socket s;
private Scanner in;
private PrintWriter out;
private ArrayList<Socket> sockets = new ArrayList<Socket>();
public Service(Socket aSocket)
{
s = aSocket;
sockets.add(s);
}
答案 0 :(得分:3)
这是因为您在每个循环中创建一个新服务=&gt;你将有6个Service对象,每个对象包含一个包含每个对象套接字的arrayList。如果您希望arrayList包含所有客户端/套接字,则必须在服务器类中包含此列表。此外,您的客户很少了解所有其他客户。 我还建议在主方法(服务器)中放入一个Thread.sleep(100),否则会占用很多你的进动能力。
public static void main(String[] args) throws IOException
{
final int PORT = 8888;
ServerSocket server = new ServerSocket(PORT);
System.out.println("Waiting...");
private ArrayList<Socket> sockets = new ArrayList<Socket>();
while(true)
{
Thread.sleep(100);
Socket s = server.accept();
System.out.println("Client connected");
Service service = new Service(s);
Thread t = new Thread(service);
t.start();
sockets.add(s);
}