首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VB >

关于 WinSock 的几个疑问,大家一定遇到过。那位高手能给小弟我正确答案

2012-02-29 
关于 WinSock 的几个疑问,大家一定遇到过。那位高手能给我正确答案?研究WinSock两天了,有一点收获,也有几个

关于 WinSock 的几个疑问,大家一定遇到过。那位高手能给我正确答案?
研究WinSock两天了,有一点收获,也有几个疑问,希望和大家讨论。

1、关于ConnectionRequest事件:
    我的理解是,仅当客户端计算机请求连接(也就是执行了Connect方法)时才发生。
    可是此时客户端的State是6(sckConnecting),如果因为某种原因客户端没有达到State   7(sckConnected),服务器端应该怎样判断客户端到底有没有成功连接?
    客户端成功连接之后   SendData   一个信息,服务器端收到之后,就可以判断“已经成功连接”了吧?

2、关于WinSock控件数组的加载
    我的服务器端把myWinSock(0)作为侦听用,LocalPort设定为“1001”。当客户端成功连接之后,动态加载WinSock控件。(myWinSock(0)只作为侦听)
    动态加载的新的WinSock控件的   LocalPort   应该怎么设定?
    有的例程将实际通信的WinSock控件的   LocalPort   与侦听用设定的相同。那么所有的客户端都使用服务器端的一个共同的端口对外通信,难道不会相互干扰吗?

    我的方法是,每一个新加载的控件数组的   LocalPort   都加1,也就是:
          myWinSock(0).LocalPort   =   1001     '侦听用

          Load   myWinSock(N)
          myWinSock(N).LocalPort   =   myWinSock(0).LocalPort   +   N     '实际通信用
    可是,如果我指定的端口刚好被其他程序使用,会出现什么状况?

3、将数据发送给远程计算机的   SendData   方法
    每次使用服务器端和客户端任何一方的   SendData   方法,我都判断是否状态为7:
          If   myWinSock.State   =   sckConnected   Then    
                SendData   Data:= "Hello "
                DoEvents
          End   If

    我到底需不需要每次都判断状态?如果状态不是7,执行   SendData   方法会不会出错?
    DoEvents是不是必需的?

4、关于   DataArrival   事件:
    服务器端和客户端任何一方,是不是激活了   DataArrival   事件就意味着两方的连接没有问题?
    执行   GetData   时我需不需要判断状态是不是7,需不需要执行之后加上   DoEvents?


[解决办法]
1. 通过stste判断,能send且不出错说明已经连接
2. 不需要设定,或者说,设定为0,windows会自动分配
3. 这个随便,如果没连接就send,会有错误发生
4. 除非有特别要求(winsock有bug,有时候state为6的时候就可以触发data_arrival事件,几率取决于人品,我人品还好,暂时没碰到过),否则不需要
[解决办法]
楼上的搞笑!
对WinSock控件做任何操作之前检查状态是个好习惯,用错误处理也可,不过还是觉得能够自己处理的就自己处理。
[解决办法]
1.是否连接成功有一个事件有一个事件 Connect 客户端连接成功会触发这个事件
2。不需要设置 设置有时候会出错
3。2个都是必须 你不知道 服务器是否把你的连接断开 因此 加上此判断 2各作用 1避免错误 2断线重连,doevents是处理消息并发的一个方法,只是解决暂时问题 但是解决不了根本
4。DataArrival 这个事件 是当一个数据包 senddate以后发生 因此有可能 在状态为6的时候触发 我想不是bug 这个事件 我 一般不用 一般用在需要分包处理的时候 如文件 的分包 我还见到有人用这个事件作发送的缓存 解决有时候 加上了doevents还会出现并发的情况

热点排行