请Socket高手进来讨论一下问题!

oo渣渣oo 2010-08-18 04:22:10
一、开发环境:VB2003

二、项目情况:我做的一个客户端程序,与服务器端进行TCP/IP Socket通讯,同步短连接方式.
步骤为:


Socket.Connect
If Socket.Connected Then
If Socket.Send Then
'设置接收超时时间
If Not Socket.Receive Then
'记录通讯超时日志
End If
Else
'记发送失败日志
End If
Else
'记连接失败日志
End
Socket.Shutdown(Both)
Socket.Close
Socket = Nothing


个人觉得这个流程应该很清晰了,不会有什么问题,而且这种方式的程序我做过好几个了,都用着呢,都没问题,可偏偏就这一个程序出问题了,搞得我头都大了.

三、异常情况:经常数据发送过去后无响应回来.严重时在服务器端重启了以后,最多两三次通讯,我这边就再也收不到服务器的响应了。

四、服务器端环境:WINDOWS SERVER 2003,开发语言JAVA(是外单位,了解到的就这么多)

五、注:服务器端最多允许我的客户端同时有三个连接上去。日志显示,我这边经常有连接使用后没有关闭,一直挂在那里,导致最后三个可用连接耗完,我这边发送的数据服务器就再也收不到了。

问题:
我这边明明在关闭前shutdown了才close的,怎么会服务器端就是看到我没关闭呢?有没有高人帮我分析一下?
...全文
224 31 打赏 收藏 转发到动态 举报
写回复
用AI写文章
31 条回复
切换为时间正序
请发表友善的回复…
发表回复
oo渣渣oo 2010-08-26
  • 打赏
  • 举报
回复
结贴!分脏!
oo渣渣oo 2010-08-26
  • 打赏
  • 举报
回复
最近两天通讯完全正常,我这边啥都没动,已经可以确认肯定是对方的问题了.

但是头痛的是:对方还是打死不承认啊.....郁闷 !
mycsdy 2010-08-24
  • 打赏
  • 举报
回复
邮箱
阿是否打算放
porschev 2010-08-23
  • 打赏
  • 举报
回复
不好判定。。如果像LZ说的那样。。。那可能真是服务器端的问题
phoeni_xin 2010-08-23
  • 打赏
  • 举报
回复
看看高手。
LeonLincc 2010-08-23
  • 打赏
  • 举报
回复
不过,本来想过来骂人的,结果又看到一篇不错的文章。。。

话说,自己不能连续发言3次的话,那没解决问题的贴岂不沉没到地心去了?
兔子-顾问 2010-08-23
  • 打赏
  • 举报
回复
那总归是个隐患。
oo渣渣oo 2010-08-23
  • 打赏
  • 举报
回复
最新情况:
1.联系了不出这种情况的单位,把连接和关闭的源代码拿来参考了一下,跟我们的一样啊!没看出有什么特别的地方!

2.最近几天通讯又很正常了,没出现什么异常情况......
iwome 2010-08-23
  • 打赏
  • 举报
回复

三、异常情况:经常数据发送过去后无响应回来.严重时在服务器端重启了以后,最多两三次通讯,我这边就再也收不到服务器的响应了。

有可能数据没有很好的接收过来,或者条件判定不对,不妨你把更多的代码贴上来.另外按照事件来接收SOCKET数据试试. 这句后面的说明是因为你的 3次通讯没释放导致服务器端不再响应的问题.

Socket.Shutdown(Both) 这个你最好try一下 看看有没有异常. 或者你试试 不用Shutdown.
allanli 2010-08-21
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 heng_s 的回复:]

引用 14 楼 sp1234 的回复:
引用楼主 heng_s 的回复:
五、注:服务器端最多允许我的客户端同时有三个连接上去。日志显示,我这边经常有连接使用后没有关闭,一直挂在那里,导致最后三个可用连接耗完,我这边发送的数据服务器就再也收不到了。

问题:
我这边明明在关闭前shutdown了才close的,怎么会服务器端就是看到我没关闭呢?有没有高人帮我分析一下?
既然是短连接,……
[/Quote]

那只能问问其他单位看看能不能搞到源代码回来自己测试一下了
  • 打赏
  • 举报
回复
太耗费服务器资源?看来你很少做服务器。

及时地释放强占的资源,才能尽可能提高服务器效率。面向互联网的服务都是如此,真正需要共享的东西,在内部都有各种各样的“池”来管理,而不是在通信上搞什么长连接。

长连接只适合少量独占服务器资源的用户(通常这些用户还有大量的通信)使用。
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 truegy 的回复:]
另外,我不明白为什么要用短连接方式,每次你收发数据还要先连接,太耗费服务器资源了,直接用长连接不行吗?是不是你们的通讯协议设计的有问题?
[/Quote]

假设与1000个客户端电脑,平均每台电脑上有10个不同种类的客户端应用软件使用这个服务器,假设客户端软件经常并发(实际上根本不用刻意设计就会很自然地并发)访问服务器,长连接没有这个能力!

打个比方,长连接就好象是火车道,所有火车必须排队通过。而短连接则比天空还宽阔(虽然需要一点点管制的成本)。
  • 打赏
  • 举报
回复
[Quote=引用楼主 heng_s 的回复:]
五、注:服务器端最多允许我的客户端同时有三个连接上去。日志显示,我这边经常有连接使用后没有关闭,一直挂在那里,导致最后三个可用连接耗完,我这边发送的数据服务器就再也收不到了。

问题:
我这边明明在关闭前shutdown了才close的,怎么会服务器端就是看到我没关闭呢?有没有高人帮我分析一下?[/Quote]
既然是短连接,那么服务器端这样检测所谓Shutdown、close就是很扯淡的事。服务器端发送和返回消息,然后就close它的socket了,管你客户端有没有close干什么?

如果不是你理解错了服务器的机制,就是对方的服务器的问题了。
oo渣渣oo 2010-08-20
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 bdxzq 的回复:]
自己设计个服务器端调试呗
[/Quote]

关键是自己做的服务器程序,在调试的时候没有问题...
oo渣渣oo 2010-08-20
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 truegy 的回复:]
另外,我不明白为什么要用短连接方式,每次你收发数据还要先连接,太耗费服务器资源了,直接用长连接不行吗?是不是你们的通讯协议设计的有问题?
[/Quote]

这个是对方单位统一的接口,没得改的...
oo渣渣oo 2010-08-20
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 sp1234 的回复:]
引用楼主 heng_s 的回复:
五、注:服务器端最多允许我的客户端同时有三个连接上去。日志显示,我这边经常有连接使用后没有关闭,一直挂在那里,导致最后三个可用连接耗完,我这边发送的数据服务器就再也收不到了。

问题:
我这边明明在关闭前shutdown了才close的,怎么会服务器端就是看到我没关闭呢?有没有高人帮我分析一下?
既然是短连接,那么服务器端这样检测所谓Shutdown、c……
[/Quote]

我的理解跟你一样,我也觉得是服务器有问题,从他们的日志来看,有时候我这边一个连接过去,他返回了以后要延迟30秒才关闭通道,而我这边对应的通道都是即时就关闭成功了,端口复用也没问题.
但是最伤心的是,对方单位打死不承认他们的系统有问题.....同时按我们了解的情况来看,也确实有其他作为客户端的单位从来不出现这种情况,所以我就完全郁闷了,怎么会出现这种事情呢?难道我们单位就是二妈生滴?
truegy 2010-08-19
  • 打赏
  • 举报
回复
另外,我不明白为什么要用短连接方式,每次你收发数据还要先连接,太耗费服务器资源了,直接用长连接不行吗?是不是你们的通讯协议设计的有问题?
truegy 2010-08-19
  • 打赏
  • 举报
回复
VB.NET没有以前VB6下用的mswinsock.ocx控件,确实很不爽,不过有国外的牛人用.NET的SOCKET类自定义了一个控件,有各种事件,跟在VB6下用mswinsock控件一样,建议你用这个,我现在所有的网络程序都用这个控件。叫winsock orcas,google一下,很好用的
思考 2010-08-19
  • 打赏
  • 举报
回复
自己设计个服务器端调试呗
taick 2010-08-19
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 wtuqi 的回复:]
引用 3 楼 heng_s 的回复:
我感觉是服务器端的程序有问题,但是对方打死不承认..........

同情
[/Quote]

+1
加载更多回复(4)

16,555

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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