【问题标题】:Client server application java客户端服务器应用程序java
【发布时间】:2011-01-02 13:04:51
【问题描述】:

我了解到服务器应用程序在特定端口中创建一个 ServerSocket,

ServerSocket ServerSock=new ServerSocket(9000);

客户端与服务器应用建立套接字连接,

Socket sock=new Socket("127.0.0.1","9000");

所以客户端知道服务器的 IP 地址和端口,我很困惑服务器如何以及何时获取有关客户端的信息。请帮忙。

提前谢谢!!!

【问题讨论】:

    标签: java client-server


    【解决方案1】:

    服务器正在“侦听”来自客户端的传入连接。想象一下端口号是门号,服务器在门口等待客人。

    因此,当服务器应用程序执行 serverSock.accept() 时,它实际上会阻塞并等待客户端到达。

    一旦客户端尝试连接,accept() 方法将自行解除阻塞并返回另一个 Socket 实例,这一次代表客户端。

    通过新的 Socket 实例,您可以知道客户端是谁。您的服务器应用程序代码示例如下:

    ServerSocket serverSock=new ServerSocket(9000);
    
    Socket clientSock = serverSock.accept(); //this will wait for a client
    
    System.out.println("Yay we have a guest! He's coming from " + clientSock.getInetAddress());
    

    【讨论】:

    • 非常感谢,在您的帮助下,我现在已经很清楚了... :-)
    • @pavithra - 实际上,您可能需要满足多个连接。因此,您需要将带有 accept() 的行放在一个循环中,并且每次有新客户端进入时,您都会创建一个新线程,以便在服务器等待另一个客户端时单独处理客户端。
    【解决方案2】:

    服务器接受带有ServerSock.accept() 的客户端。 Here 是一个教程。

    【讨论】:

      【解决方案3】:

      好吧,客户端知道要连接的服务器的 IP 和端口。
      然后客户端尝试与服务器连接。
      为此,将为客户端进程分配一个临时端口,以便如果请求连接被服务器(服务器正在侦听并尝试接受连接)机器的 TCP 层接受,则客户端套接字将可用于服务器客户端的IP和端口。
      所以现在服务器现在知道如何返回客户端。

      【讨论】: