关于 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?