我要写的是服务器端的程序
我有三个不同功能需要进行网络通讯,他们不能同时进行。这三个功能在不同的界面中。如果使不同界面分别使用一个winsock(即3个winsock),有如下疑问
如果是单个的就很好解决,Winsockserver1.Listen,Winsockserver1_ConnectionRequest,Winsockserver1_DataArrival 就好了
但是现在需要多个功能且不在一个界面完成,要怎么弄呢?
功能1完成后关闭Winsockserver1,Client也关闭了,要进行功能2client就必须再连一次。不断开Winsockserver1,功能2又连不上,
要怎么做可以是Client只连一次就完成三个功能呢?可以使用一个winsock控件来完成吗?
我有三个不同功能需要进行网络通讯,他们不能同时进行。这三个功能在不同的界面中。如果使不同界面分别使用一个winsock(即3个winsock),有如下疑问
如果是单个的就很好解决,Winsockserver1.Listen,Winsockserver1_ConnectionRequest,Winsockserver1_DataArrival 就好了
但是现在需要多个功能且不在一个界面完成,要怎么弄呢?
功能1完成后关闭Winsockserver1,Client也关闭了,要进行功能2client就必须再连一次。不断开Winsockserver1,功能2又连不上,
要怎么做可以是Client只连一次就完成三个功能呢?可以使用一个winsock控件来完成吗?
option explicitprivate from_load()
dim i as integer
for i = 1 to 1000
load winsock1(i)
winsock1.listen = true
winsock1.xxxxx.
....
..
.
next i
msgbox "Done!"
msgbox winsock1(500).status '(忘记是不是这个属性了,你用智能提示看看吧。)
end sub
前提你得在你的IDE环境下将 winsock1 的 index 属性调整为 0 然后就可以启用控件数组这样的方式来进行load了。。、
如果你要在 程序中写在某个指定index的sock 来中断连接。你可以使用 unload winsock(iiiiiiii) 'iiii是指你要断开连接的sock 的index 属性.
使用unload winsock1(1)或 winsock1(1).close的话,client也关闭退出了
那对于我来说就只有一个
Winsock2.Accept requestID '这个requestID就是Winsock1的ConnectionRequest事件发生时的那个这样,Client就和Winsock2进行通讯了。不过,此时Winsock1不能Close,所以有可能带来编程上的其他问题。测试用的例程:Option ExplicitDim ArequestID As LongPrivate Sub Form_Load()
'Winsock1进入侦听状态, Winsock2不需要进入侦听状态
Winsock1.Bind
Winsock1.Listen
End SubPrivate Sub Command1_Click()
'当Client与Winsock1连接成功之后,单击Command1,执行此段代码
If Winsock2.State <> sckClosed Then Winsock2.Close
Winsock2.Accept ArequestID
End SubPrivate Sub Winsock1_ConnectionRequest(ByVal requestID As Long)
If Winsock1.State <> sckClosed Then Winsock1.Close
ArequestID = requestID
Winsock1.Accept requestID
End SubPrivate Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
Dim s As String
Winsock1.GetData s, vbString
Debug.Print "From Winsock1 :" & s
End SubPrivate Sub Winsock2_DataArrival(ByVal bytesTotal As Long)
Dim s As String
Winsock2.GetData s, vbString
Debug.Print "From Winsock2 :" & s
End Sub
你首先要知道,你的 Client 有没有 一对多的功能. 第二点. 客户端能不能与 Client 进行对话.
通讯完成后,关闭form1的话winsock1被卸载了,通讯就退出了。这样还是要重新拨号啊
所以,建议只用一个Winsock与Client进行通讯,Winsock放在一个公用的Form中。
其实,如果你知道什么时候该Winsock2接收数据的话,自然也知道现在接收到的数据该给谁的。
还有个问题,客户端和服务器是否在一个局域网内这也是个问题。如果不是还要考虑IP地址的问题。并且如果服务器端在一个装有防火墙的网内的话,问题还有很多的。