教师初级职称评定表:vb winsock 问题

来源:百度文库 编辑:杭州交通信息网 时间:2024/04/29 05:39:08
我做了一个服务器 能和 多个客户端 建立连接..但是不知道怎么接收客户端发来的信息.服务器 代码如下:帮忙修改修改.
Private onl(100, 0)
Private index, cur, i
Private Sub Form_Load()
cur = 0
Winsock1.LocalPort = 3333
Winsock1.Listen 'Socket在程序启动时监听端口333
End Sub
Private Sub Winsock1_ConnectionRequest(ByVal requestID As Long) '接收到对方联接
If index = 0 Then '主Winsock——Winsock(0)发生消息
i = 1
While i <= cur And onl(i, 0) = 0 '在以前的Winsock中找到空闲的Winsock
i = i + 1
Wend
If i <= cur Then '在当前装载的Socket中发现有用户已经离开
Winsock2(i).LocalPort = 0 '使用现成的Socket
Winsock2(i).Accept requestID '接收
onl(i, 0) = 0 'Winsock(i)被占用
Else '在当前装载的Socket中没发现有用户离开
cur = cur + 1 '当前接收端口增加
Load Winsock2(cur) '生成新的' Winsock
Winsock2(cur).LocalPort = 0
Winsock2(cur).Accept requestID '接收
onl(cur, 0) = 0 'Winsock(cur)被占用
End If
End If
End Sub
Private Sub Winsock1_Close() '对方Socket关闭触发这个事件
Winsock1.Close '关闭自己
Form_Load
MsgBox "已断开连接", 0, "错误"
End Sub

Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long) '收到数据触发这个事件
Dim str As String

Winsock1.GetData str '收到数据时,Winsock1把数据写入缓存str
Text1.Text = Text1.Text + str + Chr(13) + Chr(10)
Text1.SelStart = Len(Text1.Text)
'在文本框中显示接收的数据
End Sub

用VB编写的服务器代码如下:

Private Sub Form_Load()
Winsock1.LocalPort = 1001 '服务器端口,端口号不能和"80","23"等重复,建议取2000以上的端口号
Winsock1.Listen '窗体载入时,服务器处于监听状态
End Sub

Private Sub Winsock1_Close()
Winsock1.Close
Winsock1.Listen '服务器关闭后,让其处于监听状态
End Sub

Private Sub Winsock1_ConnectionRequest(ByVal requestID As Long)
If Winsock1.State <> sckClosed Then
Winsock1.Close '先检查"state"是否关闭,如果没有关闭,是无法接受新的连接的
End If
Winsock1.Accept requestID '接受具有"requestID"参数的连接.服务器是如何知道远程计算机发来连接请求呢?
'因为WINDOWS是基于事件的操作系统 , 一旦有连接请求发过来, 系统马上触发ConnectionRequest事件
End Sub

Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
Dim strData As String 'strData为远程计算机发来的信息
Winsock1.GetData strData '调用"GetData"方法,接收"strData"信息
List1.AddItem (strData) '在窗体上画1个"ListBox",将"strData"的内容显示在"ListBox"中
End Sub