【问题标题】:Accepting multiple clients in Java TCP在 Java TCP 中接受多个客户端
【发布时间】:2013-01-24 03:49:44
【问题描述】:

我想在一个 Java TCP 程序中接受多个客户端。所以我使用while 循环来接受多个客户端。但问题是我无法将节点随机连接到服务器。我曾经按顺序一一连接客户端。那么如何使用switch case将节点随机连接到我的服务器呢?

我的while循环:

int port=7000;

while(true)
{
    try
    {
        node1=new ServerSocket(port+10);
        Socket check1=node1.accept();
        System.out.println("CLIENT A IS CONNECTED");
    }
    catch(Exception e)
    {
        System.out.println(e);
    }

    try
    {
        ServerSocket soc2=new ServerSocket(port+20);
        Socket check2=soc2.accept();
        System.out.println("CLIENT B IS CONNECTED");
    }
    catch(Exception e)
    {
        System.out.println(e);
    }

    try
    {
        node3=new ServerSocket(port+30);
        Socket check3=node3.accept();
        System.out.println("CLIENT C IS CONNECTED");
    }
    catch(Exception e)
    {
        System.out.println(e);
    }

    try
    {
        node4=new ServerSocket(port+40);
        Socket check4=node4.accept();
        System.out.println("CLIENT D IS CONNECTED");
    }
    catch(Exception e)
    {
        System.out.println(e);
    }

    try
    {
        node5=new ServerSocket(port+50);
        Socket check5=node5.accept();
        System.out.println("CLIENT E IS CONNECTED");
    }
    catch(Exception e)
    {
        System.out.println(e);
    }

但是当我使用这个 JavaNetBindexception 时,当我将它与 E 客户端连接时。

【问题讨论】:

  • 让你的类 Runnable 在每个 run() 实例中使用不同的 port 实例化 new ServerSocket(port)。现在你的代码会用到多个端口
  • OP 没有提到多端口。没有答案。

标签: java tcp connection port


【解决方案1】:
ServerSocket serverSocket = new ServerSocket(port);
ArrayList<Socket> clients = new ArrayList<Socket>();
while (true) {
    clients.Add(serverSocket.accept());        
}

这个怎么样?但是你仍然需要几个线程。

【讨论】:

    【解决方案2】:
    public class ThreadServer {
    
        static class ServerThread implements Runnable {
        Socket client = null;
        public ServerThread(Socket c) {
            this.client = c;
        }
        public void run() {
            try {
                System.out.println("Connected to client : "+client.getInetAddress().getHostName());
                client.close();
            } catch (Exception e) {
                System.err.println(e.getMessage());
            }
        }
        }
        public static void main(String args[]) {
            try {
                ServerSocket server = new ServerSocket(7000);
                while (true) {
                    Socket p = server.accept();
                    new Thread(new ServerThread(p)).start();
                }
            } catch (Exception ex) {
                System.err.println("Error : " + ex.getMessage());
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2013-02-17
      • 2014-08-18
      • 2014-04-07
      • 2012-11-16
      • 2015-02-14
      • 2016-10-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多