在socket 编程时如果客户端发给服务器端的数据太大,一次性不能传送完,要怎么办??

在socket 编程时如果客户端发给服务器端的数据太大,一次性不能传送完,要怎么办??,第1张

数据太大的话一般都会分包发送,TCP和UDP包都有最大的上限。如果服务器端收不到就不会执行的话要用TCP协议

传输层:

对于UDP协议来说,整个包的最大长度为65535,其中包头长度是65535-20=65515;

对于TCP协议来说,整个包的最大长度是由最大传输大小(MSS,Maxitum Segment Size)决定,MSS就是TCP数据包每次能够传

输的最大数据分段。为了达到最佳的传输效能TCP协议在建立连接的时候通常要协商双方的MSS值,这个值TCP协议在实现的时候往往用MTU值代替(需

要减去IP数据包包头的大小20Bytes和TCP数据段的包头20Bytes)所以往往MSS为1460。通讯双方会根据双方提供的MSS值得最小值

确定为这次连接的最大MSS值。

IP层:

对于IP协议来说,IP包的大小由MTU决定(IP数据包长度就是MTU-28(包头长度)。 MTU值越大,封包就越大,理论上可增加传送速率,但

MTU值又不能设得太大,因为封包太大,传送时出现错误的机会大增。一般默认的设置,PPPoE连接的最高MTU值是1492, 而以太网

(Ethernet)的最高MTU值则是1500,而在Internet上,默认的MTU大小是576字节

修改方法如下:

单击“开始”/运行,输入Regedit打开注册表,定位到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters下,修改的“TcpNumConnections”的键值,将之由10改为250,即设置TCP最大并发连接数为250。

1、众所周知,为了防范蠕虫病毒的传播和攻击,Windows XP SP2将并发线程最多限制为10个。SP2利用Messages动态链接库,来实时监控每个进程的并发线程数目,一旦它发现某进程的线程数超过10个,就会屏蔽掉部分线程。

2、TCP客户端和服务器连接时,客户端必须分配一个动态端口,默认情况下这个动态端口的分配范围为 1024-5000 ,也就是说默认情况下,客户端最多可以同时发起3977 个Socket 连接。

用ifconfig /all命令能够列出目前本机所有的IP地址,用popen("ifconfig /all")可以从匿名管道中读取这些信息。在绑定时,假如特定网卡IP地址为192.168.0.122,那么这样写可以绑定到这个IP低地址上:

sockaddr_in hmemset(&h, 0, sizeof(h))

h.sin_family = AF_INET//内部网络协议TCP\UDP等

h.sin_port = htons(80)//端口号,这里用了80

h.sin_addr.s_addr = inet_addr("192.168.0.122")//绑定到指定IP上

SOCKET s = socket(AF_INET,SOCK_STREAM,IPPROTO_IP)

if (SOCKET_ERROR = bind(s,(sockaddr*)&h,sizeof(h))==0)

{

MessageBox("失败!")

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/11246862.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-14
下一篇 2023-05-14

发表评论

登录后才能评论

评论列表(0条)

保存