程序中有两个winsock控件,一个叫sock.另一个叫listener负责监听有无新客户连接。
有的话。则load sock(i).
-----------------------------------------------
Private Sub Listener_ConnectionRequest(ByVal requestID As Long)
Dim SockIndex As Integer
Dim SockNum As Integer
On Error Resume Next
Text1.Text = requestID & "连接请求"
SockNum = UBound(ConnectState)
If SockNum > 50 Then
Exit Sub
End If
SockIndex = FindFreeSocket()
If SockIndex > SockNum Then
Load sock(SockIndex)
End If
ConnectState(SockIndex) = BUSY
sock(SockIndex).Tag = SockIndex
sock(SockIndex).Accept (requestID)
Text1.Text = SockIndex & "接受请求"
End Sub
另本人很不解的问题是:
如果有两个客户端连接服务器。则服务器程序会自动载入两个winsock控件。
那么客户程序和服务器程序之间的通信是怎样进行的呢?
服务器端的sock(1)和客户端的client进行通信
服务器端的sock(2)和客户端的client进行通信
那么服务器端怎样读取sock(1)和client通信内容呢?
服么服务器端怎样读取sock(2)和client通信内容呢?
--------------------------------------------
Private Sub Listener_DataArrival(ByVal bytesTotal As Long)
Dim dx As Double
Text1.Text = "数据来自" & Index
sock(Index).GetData dx, vbDouble
Text1.Text = "dx=" & dx
End Sub这样可以读取吗?
listen可是用来监听有无新连接的控件啊。它能得到sock(1)和client通信内容吗?
如果能。请给予解释。如果不能。请给出解决办法。
希望大家踊跃参与!
有的话。则load sock(i).
-----------------------------------------------
Private Sub Listener_ConnectionRequest(ByVal requestID As Long)
Dim SockIndex As Integer
Dim SockNum As Integer
On Error Resume Next
Text1.Text = requestID & "连接请求"
SockNum = UBound(ConnectState)
If SockNum > 50 Then
Exit Sub
End If
SockIndex = FindFreeSocket()
If SockIndex > SockNum Then
Load sock(SockIndex)
End If
ConnectState(SockIndex) = BUSY
sock(SockIndex).Tag = SockIndex
sock(SockIndex).Accept (requestID)
Text1.Text = SockIndex & "接受请求"
End Sub
另本人很不解的问题是:
如果有两个客户端连接服务器。则服务器程序会自动载入两个winsock控件。
那么客户程序和服务器程序之间的通信是怎样进行的呢?
服务器端的sock(1)和客户端的client进行通信
服务器端的sock(2)和客户端的client进行通信
那么服务器端怎样读取sock(1)和client通信内容呢?
服么服务器端怎样读取sock(2)和client通信内容呢?
--------------------------------------------
Private Sub Listener_DataArrival(ByVal bytesTotal As Long)
Dim dx As Double
Text1.Text = "数据来自" & Index
sock(Index).GetData dx, vbDouble
Text1.Text = "dx=" & dx
End Sub这样可以读取吗?
listen可是用来监听有无新连接的控件啊。它能得到sock(1)和client通信内容吗?
如果能。请给予解释。如果不能。请给出解决办法。
希望大家踊跃参与!
解决方案 »
- ●●●关于算式的问题
- 菜鸟求助!!!!!!
- vb取笔记本网卡mac地址发生的问题
- 怎么不能得到当前的输入法呀,在线等
- picture控件怎么显示和打印上下标?
- 高分求救!!我的工具栏图标怎么突然消失料?
- 如何从记录集中的数据追加到表中
- 为什么在第一个get()出现找不到gdi32.dll入口的错误提示!!急!!在线等待!~~!~!~!~~
- VB6居然可以开发WINDOWS CE
- 请问vb中有没有这样的函数,它能够比较两个时间差了多少秒,如果没有能不能给出算法或程序段?
- 感谢xinyu_1980(心雨),另外,有没有vsView 8.0的版本,哪有下?
- ~ ~ 一个select........语句搞不清了??????大侠帮忙呀
Private Sub sock_DataArrival(index as integer,ByVal bytesTotal As Long)
Dim dx As Double
Text1.Text = "数据来自" & Index
sock(Index).GetData dx, vbDouble
Text1.Text = "dx=" & dx
End Sub
见例子:
Private Sub sckServer_ConnectionRequest _
(Index As Integer, ByVal requestID As Long)
If Index = 0 Then
intMax = intMax + 1
Load sckServer(intMax)
sckServer(intMax).LocalPort = 0
sckServer(intMax).Accept requestID
Load txtData(intMax)
End If
End Sub
Dim dx As Double
Text1.Text = "数据来自" & Index
sock(Index).GetData dx, vbDouble
Text1.Text = "dx=" & dx
End Sub
是不行的,应该用sock的dataarrival事件
1、scksrv(0).listen
2、scksrv_connectionrequest(index...
if index=0 then
load scksrv(Idleindex)
end if
3、scksrv_DataArrival(index,ByVal bytesTotal As Long)
scksrv(index).getdata Vdata
...
Private Sub WinsockServer_DataArrival(Index As Integer, ByVal bytesTotal As Long)
Dim s As String
Dim i As Integer
WinsockServer(Index).GetData s
If UCase(Left(Trim(s), 2)) = "PT" Then '判断是否为悄悄话,点对点方式
If IsNumeric(Mid(Trim(s), 3, 1)) Then
i = Mid(Trim(s), 3, 1)
WinsockServer(i).SendData "Channel " & Index & " " & Right(Trim(s), Len(Trim(s)) - 3)
DoEvents
End If
Else '广播方式
For i = 0 To MaxChan - 1
'利用winsock的State属性给所有连接在服务器上的客户发消息
If WinsockServer(i).State = 7 Then
WinsockServer(i).SendData "Channel " & Index & " " & Trim(s)
DoEvents
End If
Next i
End If
ListShow.AddItem "channel" & Index & ":" & Trim(s)
End Sub
添加一个时间控件,检查winsock的state属性.如果是同级关闭,错误,关闭等状态时,把它unload了,再相应的设置布尔数组index维的值为false!
然后在winsock的connectionrequest事件里,搜索布尔数组那一维被设成false了,如果没有,就把布尔数组用redim preserve扩大一下,load winsock(ubound(布尔))
这里还有一个第一次连接的问题,楼主看着办了!