客户端/服务器应用程序Java

3

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

ServerSocket ServerSock=new ServerSocket(9000);

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

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

客户端知道服务器的IP地址和端口,但我不确定服务器何时以及如何获得客户端的信息,请帮忙解答。
提前致谢!
3个回答

6
服务器正在等待客户端的传入连接,可以将端口号想象成门牌号码,服务器就像在那扇门前等待客人一样。
因此,当服务器应用程序执行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 Gunasekara
2
@pavithra - 实际上,您可能需要处理多个连接。因此,您需要将带有accept()的行放入循环中,并且每次有新客户端进来时,您都需要创建一个新线程,以便单独处理客户端,同时服务器等待另一个客户端。 - jbx

2
服务器使用 ServerSock.accept() 接受客户端。这里有一个教程:链接

0

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接