同样关于Winsock的涉及多线程开发!(斑竹进)

kingMax99 2002-09-29 05:06:03
我编了Winsock的简单的模拟程序,有点象聊天。 开一个CLIENT端,没有任何问题。当开启两个和两个以上的CLIENT时就会出现只有一个CLIENT端工作正常,其他CLIENT端只能发数据,不能接受数据。(实际上接受到了,只是不能被显示出来。)感觉就如同接受到的数据被缓冲了,在其他CLIENT退出后,被一起显示出来了。但是我用DEBUG调试,又一切正常,每个CLIENT端的数据能正常接受和显示。
初步估计需要加入多线程。现在就想问问在VB中对于通讯多线程的使用模式。比如:在什么地方使用CreateThread(),如何使用比较好?等等!! 请斑竹和其他大虾赐教!(紧急)
...全文
146 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
zqfleaf 2002-09-29
  • 打赏
  • 举报
回复
不用多线程也可以,看你的winsock服务端是怎么写的。
我是这样写,你可以参考一下
Private Sub Form_Load()
Load Winsock(100)'最大连接数100
winsock(0).listen
End Sub

Private Sub Winsock_ConnectionRequest(Index As Integer, ByVal requestID As Long)

For i = 1 To 100
If Winsock(i).State = sckClosed Then
Winsock(i).Accept requestID
Exit For
End If
Next
end sub
zdk 2002-09-29
  • 打赏
  • 举报
回复
Winsock用的是数组吗?
kingMax99 2002-09-29
  • 打赏
  • 举报
回复
Load Winsock(100) 我加了,一样!:(
给我你的EMAIL,我把代码发给你一看,你就明白了!我的代码和你差不多!
Private Sub serSocket_ConnectionRequest(Index As Integer, ByVal requestID As Long)
If Index = 0 Then
Dim i As Integer
Dim closed As Boolean
closed = False
For i = 1 To intMax
If serSocket(i).State = 0 Then
closed = True
Exit For
End If
Next
If closed Then
serSocket(i).LocalPort = 1001
serSocket(i).Accept requestID
Else
intMax = intMax + 1
Load serSocket(intMax)
serSocket(intMax).LocalPort = 1001
serSocket(intMax).Accept requestID
End If
Label1.Caption = "Users :" & intMax & "个人"
End If
End Sub

Private Sub serSocket_DataArrival(Index As Integer, ByVal bytesTotal As Long)
Dim data1 As String
serSocket(Index).GetData data1
recTxt.Text = recTxt.Text & data1 & vbCrLf
For i = 1 To intMax '转发其他CLIENT,能不能在这里这样发?
If serSocket(i).State <> 0 Then
serSocket(i).SendData "" & data1
End If
Next
End Sub

7,789

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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