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的错误。

构造Socket

1:Socket的构造函数Socket()   通过系统默认类型的 SocketImpl 创建未连接套接字Socket(InetAddress address, int port)   创建一个流套接...
  • woshisap
  • woshisap
  • 2011年06月28日 23:42
  • 2788

java.net.ConnectException: connection failed: socket,host=localhost,port=8100,tcpNoDelay=1:

今天做文档转换时遇到这个问题,网上看了一下,没找到吧,或许是自己没工夫瞎看吧,一些英文博客上是有一些东东,可是却没有说中要害啊,无奈之下,看了一下源码 就是这样,我在使用时是这样调用的  Open...
  • yl419440513
  • yl419440513
  • 2011年10月14日 10:32
  • 11563

socket编程总结(端口使用/bind/select/iocp等)----windows环境下

1、理论上一台服务器最多能接受多少个连接?是65535吗?            理论上要大于65535:       背景: A、监听端口和通信端口不是同一个:socket编程时服务端会指定一个端...
  • woshiyuanlei
  • woshiyuanlei
  • 2015年06月09日 15:58
  • 865

如何修改windows Socket端口默认5000限制

如何增加打开端口的数量呢   www.2cto.com   SOCKET.close()是不马上释放连接的,而是设置为TIME_WAIT状态,这个时间默认是240S,也就是4分钟。这太长了,有30秒(...
  • qq_29235047
  • qq_29235047
  • 2017年05月27日 14:26
  • 515

Android socket 学习记录 之 执行new socket(ip, port)程序崩溃

这段时间在学习Android的socket编程,我不是专做APP的,做的是bootloader、驱动、hal、framework这个线的,也就是系统搭建和功能优化设计。为了打通这整条线,为此学习了不少...
  • u010406724
  • u010406724
  • 2015年04月02日 17:40
  • 3426

filezilla Failed to create listen socket on port 21 for IPv4 解决办法

发布:mdxy-dxy 字体:[增加 减小] 类型:转载 今天帮一个客户配置filezilla的时候,提示filezilla Failed to create listen socket...
  • longlongago7777
  • longlongago7777
  • 2014年04月02日 19:04
  • 2129

怎样在socket代码中获得由内核自动分配的端口号

http://bbs.chinaunix.net/thread-1460809-2-1.html 请教一个问题,我正在写一个linux上ftp客户端程序,遇到一个问题,请各位大侠帮助。 ...
  • diy534
  • diy534
  • 2011年11月08日 00:56
  • 2155

Python笔记:socket模块的getaddrinfo详解

函数原型:socket.getaddrinfo(host, port[, family[, socktype[, proto[, flags]]]]) 返回值:[(family, socktype,...
  • qdx411324962
  • qdx411324962
  • 2015年07月17日 10:51
  • 3163

GetSocketLocalPort

USHORT GetSocketLocalPort(SOCKET s) { sockaddr Addr; sockaddr_in *lpSa; int addr_len = sizeof(Add...
  • Sidyhe
  • Sidyhe
  • 2013年09月13日 14:30
  • 907

mysql故障排错临时打开通用日志和慢查询日志

有时候你遇到sql 执行报错,有的是语法错误很好判断,但有的是sql本身写的没有问题,就是在执行的时候报错,有的sql很复杂你根本就不知道具体的哪一个地方报错,这个时候你可以把复杂的sql分解去确定报...
  • weiwangsisoftstone
  • weiwangsisoftstone
  • 2016年05月18日 08:31
  • 1650
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:windows socket port的修改
举报原因:
原因补充:

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