黑马程序员技术交流社区

标题: 新人求助,大神给分析一下。 [打印本页]

作者: innovator    时间: 2016-6-26 00:22
标题: 新人求助,大神给分析一下。
网络编程里的客户端和服务端的问题咨询:
客户端:
            Socket socket = new Socket("127.0.0.1", 12345);
疑问一:因为是本机演示,所以接收的127.0.0.1。如果是和外机服务器连接,这里应该传的是本机的IP地址,还是服务器的IP地址。

百度上了解到:客户端通常对它所使用的端口号并不关心,只需保证该端口号在本机上是唯一的就可以了。客户端口号又称作临时端口号(即存在时间很短暂)。这是因为它通常只是在用户运行该客户程序时才存在,而服务器则只要主机开着的,其服务就运行。如果不是公认端或者保留端的话,端口号一般动态分配。


服务器:
          ServerSocket server = new ServerSocket(12345);
疑问二:如果说“new Socket("127.0.0.1", 12345);”中的12345端口号是客户端的端口号,那么服务器开启多线程时,也就是说会接收多个不同的客户端,为什么里面的端口号只绑定其中一个客户端的端口号呢?
有可能我的理解前提和认识就错了,希望大神给解释一下

作者: zhoubinjian    时间: 2016-6-26 02:22
与外机连接,是本机IP,至于端口,它是只能与一个程序或者服务绑定,这样访问访程序或者服务的时候,才不会端口冲突
作者: innovator    时间: 2016-6-26 09:32
谢谢~
不过还有疑问,那“Socket socket = new Socket("127.0.0.1", 12345);”上面的端口号,是本机自己分配的呢?还是说服务端给客户端设定的,因为服务端的端口号一般是固定的。
还有因为请求是客户端先发出的,或者说ServerSocket server = new ServerSocket(12345);中端口号绑定的是客户端发过来的端口号?
如果是客户端的端口号,那么服务端下面的多线程就有问题了?
作者: zhoubinjian    时间: 2016-6-26 11:46
socket客户端的ip+端口号,是你指定要访问哪台计算机,那个服务,不是说自己定义的,你要对上服务端的服务端口,而SocketServer服务端的端口是给服务设定一个端口,接收客户端发送的数据
作者: innovator    时间: 2016-6-26 12:44
zhoubinjian 发表于 2016-6-26 11:46
socket客户端的ip+端口号,是你指定要访问哪台计算机,那个服务,不是说自己定义的,你要对上服务端的服务 ...

这句话有疑问:socket客户端的ip+端口号,是你指定要访问哪台计算机,那个服务,不是说自己定义的,你要对上服务端的服务端口。
那么连接外机的时候“Socket socket = new Socket("127.0.0.1", 12345);”上面的IP地址不应该是服务端的IP吗?
如果是本机IP,“ServerSocket server = new ServerSocket(12345)”这里只有服务端端口号,
那么怎么找到服务端ServerSocket(服务端的IP+端口号)?
如果是服务端IP,是不是意味着客户端发送请求的时候,默认把自己的IP+接收端口号发过去了?
作者: innovator    时间: 2016-6-26 20:13
innovator 发表于 2016-6-26 12:44
这句话有疑问:socket客户端的ip+端口号,是你指定要访问哪台计算机,那个服务,不是说自己定义的,你要 ...

虽然回答没有完全解决疑惑,还是谢谢你的回答。
作者: 孟小垚    时间: 2016-6-26 21:42
看一看,瞧一瞧




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2