A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 刘秋菊 中级黑马   /  2012-8-3 23:26  /  1620 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

客户端的套接字在调用Connect方法向服务器发送请求时,是不是把自己的IP地址和应用程序端口号也发送给服务器了呢?

评分

参与人数 1技术分 +1 收起 理由
郑文 + 1

查看全部评分

2 个回复

倒序浏览
恩,差不多吧
回复 使用道具 举报
是包含了自己的ip和port,但是具体是不是在connection中包含就不得而知了,但是肯定是有这部分信息的。
因为,服务端在接收到连接请求之后,会调用Accept()方法,对此次的连接请求新产生一个socket,而这个socket中包含了两步内容,一部分是客户端的ip和port,另一部分则是服务端自己的ip和port,可能很多人会忽视了服务端的这部分信息,认为在新产生的socket中只有客户端的ip和port,但如果是这样的话,服务端怎么区分这是哪个应用开通的端口,客户端的ip和port可以指定需要连接的客户机,那么客户机发来的信息,服务端又该怎么处理呢?没有服务端自身的ip和port,客户端发送的信息会到达服务端,但是却不知道是哪个程序需要这部分信息,所以连接套接字中两部分信息都是必不可少;
一个监听的套接字在开始的时候,就会指定监听的端口号,这就是为了给这个程序分配一个借口,所有这种的客户机都是用这个端口连接服务端的,所以,同一个应用每一次调用accept(),只是客户端的信息在变,服务端的信息不会变。这样,通过防火墙的时候,就会在指定的几个允许的端口进行连接操作,不会因为每一次连接服务端就有一个新的端口开启,导致不能通过防火墙。

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马