关于socket的一些疑问
来源:互联网 发布:森林鸟旗舰店淘宝 编辑:程序博客网 时间:2024/05/02 02:06
Q: accept接受socket的描述符作为参数,之后返回另一个socket描述符,那这两个socket有什么区别和联系? 假如调用之前的socket绑定在8000端口,那返回之后的socket是不是也绑定在8000端口?一个端口可以绑定几个socket吗?
A:socket看成IP+端口,server的IP x:8000 是那个在listen的socket做参数传给accept,从这个socket可以得到一些访问它的英特网用户,它们就是那个返回的socket,比如y:4321,然后你可以用其它的线程和这个socket通信,收和发,它代表已经连接的链路。画个图
server [ 192.168.1.128 : 8080 ] state: listening
| | | ...... |
client1 client2 client3 ...... clientx [ 10.0.1.255 : 1234 ]
一开始是client知道server的IP,或者用DNS解析后的IP,和某种协议固定的端口号,然后发送连接请求,client会一直用那个socket[ 192.168.1.128 : 8080 ]和server通信(可能协议还会建立其它链路,只一般情况),而server会用client的IP和某个端口进行通信,那就是accept返回的socket。
我们打电话的时候,都要拿着一头的话筒,那个话筒连接着对方(技术细节忽略),通话的双方都拿着和对方相连的话筒,这两个socket是不同的,都代表着对方。
不是一个端口可以绑定几个socket,就只有一个IP的计算机来说,终端,它可以有很多服务,每一个服务或者进程会使用不同的端口,比如同一个办公楼层不同的房间号码,在应用层,能够通信的对象变成了‘进程’,只考虑进程间的网络通信,而端口就是用来分发给进程用的,OS收到了TCP包,把端口号取出来,再送到相应的进程并通知它进行处理。accept返回的,收到的socket是对方client的IP+端口号,和你自己的进程占用的端口号不相关,这些端口号是确保你发送的信息会正确的到达对方的机器上的正确的进程中去。
- 关于socket的一些疑问
- 关于360的一些疑问
- 关于PopupMenuListener的一些疑问
- 关于Spring的一些疑问
- 关于chukwa的一些疑问
- 关于jdbc的一些疑问
- 关于MFC的一些疑问
- 关于定位的一些疑问
- 关于图片的居中的一些疑问
- 关于set_new_handler的一些残存疑问
- 关于学习C#的一些疑问。
- 关于Storm的一些疑问解答
- 关于strpos函数的一些疑问
- 关于LINUX驱动的一些疑问
- 关于WiMax认证的一些疑问
- 关于AMQP协议的一些疑问
- 关于软件学习的一些疑问
- 关于hibernate级联修改的一些疑问
- 创建虚拟机并搭建GitLab代码管理环境
- 3.用户数据报(UDP):进程到进程的通信
- AppIcon-APP应用图标 一键生成工具
- ListActivity和SimpleAdapter
- securityManager
- 关于socket的一些疑问
- Jquery判断$("#id")获取的对象是否存在的方法
- Android+ionic +phonegap 调用摄像头 $cordovaCamera
- iphone5s怎么取消iphone系统更新如何关闭系统更新提醒
- 线性规划单纯形模板
- LeetCode - Add Digits
- Reserve java调用R语言
- 手机无法弹出允许usb调试解决方法
- 《JAVA源码分析》:LinkedList