windows socket port的修改

原创 2012年03月29日 10:37:00
在TCP应用程序中,双方的通信是面向连接的,在同一台计算机上的多个连接需要能相互区别。TCP协议里面是用[源IP+源Port+目的IP+目的Port]来区别两个不同连接的。也就是说,只要这四个参数中有一个以上不同,这两个连接就不同。在BBS上面看到很多人简单地认为可使用的端口个数是可建立的连接的限制因素,其实这个不对的。服务端和客户端软件的连接限制因素是不同的,下面我们分别来看看。

        在服务端软件中,会有一个端口用来监听接受客户端的连接,站在客户端的角度来看,它叫目的端口,不同计算机连接到服务端该端口的连接的IP(即源IP)必然不同,而同一台计算机的两个不同连接则使用不同的端口(即源端口)连接到服务端的。不管有几个客户端连接,服务端只使用了一个端口,服务端通过源IP和源端口来识别不同的客户。有人就会问难道服务端能接受无数个连接。理论上是这样的,但事实并非如此,因为系统每创建一个连接都要使用一定的分页内存和非页面缓冲池的内存,而计算机的内存资源不可能无限,因此服务端也不可能接受无数的连接。当连接数达到一定数目时,可能就会出现10055的错误,这个错误就是告诉你内存资源不足了。具体的内存资源和可接受连接数的限制关系有空的时候再另外写一篇。

        客户端和服务端不同,客户端每发起一个连接都要使用一个随机的端口,称为临时端口。因为端口的范围是0~65535,而1024以下的是系统保留的端口,因此理论上最多可以有65535-1024个端口可以使用,但实际测试却发现可能5000个连接都达不到就会出现10048的错误。其实这是因为windows系统设置了限制。在windows中这个临时端口默认的范围是1024~5000,也就是只有3977个可用端口,如果再多就会不行了,会出现10048的错误。当然有可能还没到达这么多个就出现内存资源不足的错误了,因为客户端和服务端一样,也会受内存资源因素的限制。但这是硬件资源上的问题,我们主要看一下怎么调整这个临时端口范围的限制。windows提供了一种方法来解决这个问题,在注册表HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters下建一个MaxUserPort的双字节值,指定最大的临时端口个数,比如改为10000,那可用的临时端口范围就是1024~10000了。该参数最大可以改到65534。

       修改MaxUserPort貌似需要重启计算机才能生效,我修改成50000后,发起5000个连接到服务端就一部分连接出现10048的错误。重启后连了近2万个连接,始终没有出现10048的错误。

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

TCP、UDP及Socket(Port)的关系,深入浅出!

提醒:貌似这里说的socket是指port,而非socket api技术!仅供参考!貌似标题命名不准确的说 《更安全的Linux网络》第1章防火墙的基本概念,在本书的开始将详尽讲解与防火墙相关的TC...

socket编程相关的结构体和字节序转换、IP、PORT转换函数

注意:结构体之间不能直接进行强制转换, 必须先转换成指针类型才可以进行结构体间的类型转换, 这里需要明确的定义就是什么才叫强制转换. 强制转换是将内存中一段代码以另一种不同类型的方式进行解读, 因此...

TCP、UDP及Socket(Port)的关系,深入浅出!

转自:点击打开链接 提醒:貌似这里说的socket是指port,而非socket api技术!仅供参考!貌似标题命名不准确的说 《更安全的Linux网络》第1章防火墙的基本概念,在本书的开始将详尽...
  • CTO_51
  • CTO_51
  • 2013-08-19 22:07
  • 1135

Socket I/O模型之完成端口(completion port)

“完成端口”模型是迄今为止最为复杂的一种I/O模型。然而,假若一 的是,该模型只适用于Windows NT和Windows 2000操作系统。因其设计的复杂性,只有在你的应用程序需要同时管理数百乃至上...

Intellj IDEA14上用Debug启动项目启动不了:Unable to open debugger port: java.net.SocketException "socket closed"

[已解决:有应该断点没去掉]Unable to open debugger port: java.net.SocketException "socket closed" 网上说要,重启电脑IDEA才可...

Socket I/O模型之完成端口(completion port)

Socket I/O模型之完成端口(completion port) C++代码 1. // write by larry 2. // 2009-8-20 3. // This is a se...

【Linux Socket 编程入门】03 - 关于IP,Subnet,Port你应该知道的那些事儿

IP地址的分类 目前,IP地址分为两类,IPv4 (Internet Protocol Version 4)与IPv6 (Internet Protocol Version 6). IPv4 IP...

手把手教你玩转SOCKET模型:完成端口(Completion Port)详解

手把手教你玩转SOCKET模型:完成端口(Completion Port)详解 2014-11-14 06:28 ⁄ 工业·编程 ⁄ 共 29514字 ⁄ 字号 小 中 大 ⁄ 评论 7...

Socket I/O模型之完成端口(completion port)

“完成端口”模型是迄今为止最为复杂的一种I/O模型。然而,假若一个应用程序同时需要管理为数众多的套接字,那么采用这种模型,往往可以达到最佳的系统性能!但不幸的是,该模型只适用于Windows NT和W...

BAE3 使用Port扩展-SSH和自己开启Socket服务

在原本的bae中,port是免费的,也需要申请的。最近发现port可以自己直接添加了,一天1毛钱。。。 在bae中找到了一些文档,这些文档竟然没有过时。。。。https://bce.baidu.co...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)