多线程socket同一个IP和端口,只有15个线程能够成功 5
hd=socket(#AF_INET,#SOCK_STREAM,#IPPROTO_TCP)//创建socketaddr.sin_port=htons(993)addr.s...
hd = socket (#AF_INET, #SOCK_STREAM, #IPPROTO_TCP)//创建socket
addr.sin_port = htons (993)
addr.sin_addr = inet_addr (“80.12.24.204”)
addr.sin_family = #AF_INET
hSocket = Connect (hd, addr, 16)//进行tcp连接,返回指针 hSocket,-1表示连接失败,错误码10060。0表示连接成功
这里我用到了多线程,同时并发100个线程,100个线程同时去连接同一个IP和端口。那么现在的问题就是,100个线程只有15个线程成功,其他的85个线程全部返回 -1,错误码10060。请问这里只要是什么限制导致我只有15个线程成功了呢? 展开
addr.sin_port = htons (993)
addr.sin_addr = inet_addr (“80.12.24.204”)
addr.sin_family = #AF_INET
hSocket = Connect (hd, addr, 16)//进行tcp连接,返回指针 hSocket,-1表示连接失败,错误码10060。0表示连接成功
这里我用到了多线程,同时并发100个线程,100个线程同时去连接同一个IP和端口。那么现在的问题就是,100个线程只有15个线程成功,其他的85个线程全部返回 -1,错误码10060。请问这里只要是什么限制导致我只有15个线程成功了呢? 展开
1个回答
展开全部
分两种情况来讲。
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
Storm代理
2023-07-25 广告
2023-07-25 广告
StormProxies是一家国内优质海外HTTP代理商,拥有一个庞大的IP资源池,覆盖200多个地区,IP数量大且匿名度高。其优点还包括超高并发、稳定高效、技术服务等特点,同时提供HTTP、HTTPS以及SOCKS5协议支持。此外,Sto...
点击进入详情页
本回答由Storm代理提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询