问一个多线程共享端口的问题
一个应用程序绑定了一个端口。这个端口内有五个线程,这五个线程都通过这个端口同时发送、接受数据。我的问题是,假如来了数据,那么应用程序如何判断该把这个数据发送给哪个线程呢?...
一个应用程序绑定了一个端口。这个端口内有五个线程,这五个线程都通过这个端口同时发送、接受数据。
我的问题是,假如来了数据,那么应用程序如何判断该把这个数据发送给哪个线程呢?
我指的是内部的实现原理 展开
我的问题是,假如来了数据,那么应用程序如何判断该把这个数据发送给哪个线程呢?
我指的是内部的实现原理 展开
2个回答
展开全部
分两种情况来讲。
1,应用程序是client,绑定端口,读写同一个socket,因为对socket读和写是原子的,同时有且仅有一个线程可以发送和接收,那么,哪个线程获得了锁,就哪个读或者是写。
2,应用程序是server,绑定端口port1,因为通常用一个socket来接收新的连接,不同的线程来处理新建的连接,这个时候 ,不会有冲突发生,因为,读写的是不同的socket。
最后,纠正一下,应用程序不是直接通过端口与其它应用通信的,而是通过操作系统封装过的一个抽象的数据类型socket与其它应用通信。对于TCP/IP来说,一个socket至少包含这样四个元素,本机ip、本机port、远程ip、远程port
1,应用程序是client,绑定端口,读写同一个socket,因为对socket读和写是原子的,同时有且仅有一个线程可以发送和接收,那么,哪个线程获得了锁,就哪个读或者是写。
2,应用程序是server,绑定端口port1,因为通常用一个socket来接收新的连接,不同的线程来处理新建的连接,这个时候 ,不会有冲突发生,因为,读写的是不同的socket。
最后,纠正一下,应用程序不是直接通过端口与其它应用通信的,而是通过操作系统封装过的一个抽象的数据类型socket与其它应用通信。对于TCP/IP来说,一个socket至少包含这样四个元素,本机ip、本机port、远程ip、远程port
追问
按你的说法,一个端口会对应若干个同时运行的socket,对吧?那当数据来了的时候,计算机如何判断该把数据发送给哪个socket呢?
追答
操作系统会根据数据(网络包)里面的这几个信息找到对应的socket:
1 源ip地址
2 源端口
3 目的ip地址
4 目的端口
数据包里面的这几个信息的更加详细的描述可以参考百科(http://baike.baidu.com/view/7649.htm),这部分也是计算机学科里面网络通信的基础知识,一般计算机网络相关的书籍会有详细的讲解。
Storm代理
2023-07-25 广告
2023-07-25 广告
StormProxies是一家国内优质海外HTTP代理商,拥有一个庞大的IP资源池,覆盖200多个地区,IP数量大且匿名度高。其优点还包括超高并发、稳定高效、技术服务等特点,同时提供HTTP、HTTPS以及SOCKS5协议支持。此外,Sto...
点击进入详情页
本回答由Storm代理提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询