在构造函数中使用套接字填充ArrayList?

时间:2014-05-01 01:17:47

标签: java sockets arraylist

当我将套接字传递给构造函数时,我正在尝试使用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);
}

1 个答案:

答案 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);
    }