socket客户端频繁进行打开、关闭操作后,无法连接的问题?

efei 2012-02-19 10:09:38
操作很简单,就是连接服务器后发送一点数据过去,等到收到数据后再关闭连接,并再次连接服务器,如此反复

这样进行一定次数之后,服务器就连不上了,会报10060错误。搞笑的是这个时候浏览器也打开不网页。。。

而且呢,这个在不同的机器上表现差异很大。在我的XP上大概累计到380次左右,到一个装有ISA的2003服务器上则没什么问题。
但是在另外一台2003机器上却比我的XP上还要差。

我大概搜索了下,貌似和HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters下的参数有关。
照着改了几个值,却没什么变化。

请教如何在XP下调整参数,以适应测试需求。
...全文
1345 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhanshen2891 2012-02-20
  • 打赏
  • 举报
回复
服务端socket没有关闭
yli5891 2012-02-20
  • 打赏
  • 举报
回复
不停的打开,关闭socket,可能是触发了socket的client丢失事件,
你在每次close套接字之前,调用shutdown函数,看能不能有所改善,
efei 2012-02-20
  • 打赏
  • 举报
回复
在一台2003上运行没问题呀,一直可以的。
向立天 2012-02-20
  • 打赏
  • 举报
回复
这类肯定是服务器的问吧
想当于恶意攻击
chenjiawei007 2012-02-20
  • 打赏
  • 举报
回复
10060:由于连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败。

才360很少可能是客户端的问题。

应该是你们的服务器设计的太烂了,listen的数改大到100--500应该没有问题了。还有注意服务,客户端关闭连接后,服务器也要将socket关闭,不然服务器占连接数。
yli5891 2012-02-20
  • 打赏
  • 举报
回复
把TIME_WAIT关掉,在网络阻塞的情况下,会丢包的,
[Quote=引用 8 楼 efei 的回复:]
问题解决了,我在测试端加了如下代码,消除了TIME_WAIT的影响。这样就可以一直打开/关闭进行下去了。


C/C++ code


struct linger so_linger;
so_linger.l_onoff = TRUE;
so_linger.l_linger = 0;
int z = setsockopt(m_hSocket,
SOL_SOCKET,
……
[/Quote]
efei 2012-02-20
  • 打赏
  • 举报
回复
问题解决了,我在测试端加了如下代码,消除了TIME_WAIT的影响。这样就可以一直打开/关闭进行下去了。


struct linger so_linger;
so_linger.l_onoff = TRUE;
so_linger.l_linger = 0;
int z = setsockopt(m_hSocket,
SOL_SOCKET,
SO_LINGER,
(char*)&so_linger,
sizeof(so_linger)
);
mayudong1 2012-02-20
  • 打赏
  • 举报
回复
客户端频繁的开关,用netstat命令看看是不是好多端口都成了time_wait状态,导致端口不可用了

但10060错误又好像是因为服务器的问题
smwhotjay 2012-02-20
  • 打赏
  • 举报
回复

很简单的问题..
第一步 充分理解Socket    1.什么是socket    所谓socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄。应用程序通常通过"套接字"向网络发出请求或者应答网络请求。    以J2SDK-1.3为例,Socket和ServerSocket类库位于java.net包中。ServerSocket用于服务器端,Socket是建立网络连接时使用的。在连接成功时,应用程序两端都会产生一个Socket实例,操作这个实例,完成所需的会话。对于一个网络连接来说,套接字是平等的,并没有差别,不因为在服务器端或在客户端而产生不同级别。不管是Socket还是ServerSocket它们的工作都是通过SocketImpl类及其子类完成的。    重要的Socket API:    java.net.Socket继承于java.lang.Object,有八个构造器,其方法并不多,下面介绍使用最频繁的三个方法,其它方法大家可以见JDK-1.3文档。    . Accept方法用于产生"阻塞",直到接受到一个连接,并且返回一个客户端Socket对象实例。"阻塞"是一个术语,它使程序运行暂时"停留"在这个地方,直到一个会话产生,然后程序继续;通常"阻塞"是由循环产生的。    . getInputStream方法获得网络连接输入,同时返回一个IutputStream对象实例,。    . getOutputStream方法连接的另一端将得到输入,同时返回一个OutputStream对象实例。    注意:其中getInputStream和getOutputStream方法均会产生一个IOException,它必须被捕获,因为它们返回的流对象,通常都会被另一个流对象使用。    2.如何开发一个Server-Client模型的程序    开发原理:    服务器,使用ServerSocket监听指定的端口,端口可以随意指定(由于1024以下的端口通常属于保留端口,在一些操作系统中不可以随意使用,所以建议使用大于1024的端口),等待客户连接请求,客户连接后,会话产生;在完成会话后,关闭连接。    客户端,使用Socket对网络上某一个服务器的某一个端口发出连接请求,一旦连接成功,打开会话;会话完成后,关闭Socket客户端不需要指定打开的端口,通常临时的、动态的分配一个1024以上的端口。    {建立服务器} import java.net.*; import java.io.*; ...... . . . . . . . .

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧