vb winsock控件

vb高手们帮帮忙:用vbwinsock控件写一个服务器和客户端,用来计时的要求可连接多个用户高手能否给个winsock控件编程例子参考一下,我是个菜鸟... vb高手们帮帮忙:用vb winsock控件写一个服务器和客户端,用来计时的要求可连接多个用户
高手能否给个winsock控件编程例子参考一下,我是个菜鸟
展开
 我来答
无敌闹闹i
2010-05-15 · TA获得超过328个赞
知道答主
回答量:137
采纳率:0%
帮助的人:80.7万
展开全部

这个多客户无非就是创建个数组呗。

我直接给代码:

客户端:

Option Explicit

'发送数据

Private Sub command1_Click()

Dim a As String

a = Text2.Text

sock.SendData a

MsgBox ("data sended")

End Sub

Private Sub Form_Load()

Text1.Text = ""

Text2.Text = ""

'远程主机名

sock.RemoteHost = "wenlvzhao.3322.org"

'网络端口

sock.RemotePort = 4981

'发出连接命令

sock.Connect

Command1.Enabled = False

End Sub

'服务器关闭

Private Sub sock_Close()

MsgBox ("socket closed")

End Sub

'连接成功

Private Sub sock_Connect()

MsgBox ("socket connected")

Command1.Enabled = True

End Sub

Private Sub sock_DataArrival(ByVal bytesTotal As Long)

Dim a As String

sock.GetData a

Text1.Text = "[某人]" + a + vbCrLf

End Sub

服务端:

Option Explicit

'定义常量

Const BUSY As Boolean = False

Const FREE As Boolean = True

'定义连接状态

Dim ConnectState() As Boolean

Private Sub Command1_Click()

Text1.Text = Text1.Text & "[无敌闹闹]:" & Text2.Text & vbCrLf

End Sub

Private Sub Form_Load()

ReDim Preserve ConnectState(0 To 1)

On Error Resume Next

ConnectState(0) = FREE

ConnectState(1) = FREE

'指定网络端口号

Listener.LocalPort = "4981"

Text1.Text = ""

Text2.Text = ""

'开始侦听

Listener.Listen

End Sub

Private Sub Listener_ConnectionRequest(ByVal requestID As Long)

Dim SockIndex As Integer

Dim SockNum As Integer

On Error Resume Next

StatusBar1.Panels(1).Text = requestID & "连接请求"

'查找连接的用户数

SockNum = UBound(ConnectState)

If SockNum > 14 Then

Exit Sub

End If

'查找空闲的sock

SockIndex = FindFreeSocket()

'如果已有的sock都忙,而且sock数不超过15个,动态添加sock

If SockIndex > SockNum Then

Load Sock(SockIndex)

End If

ConnectState(SockIndex) = BUSY

Sock(SockIndex).Tag = SockIndex

'接受请求

Sock(SockIndex).Accept (requestID)

End Sub

'客户断开,关闭相应的sock

Private Sub Sock_Close(Index As Integer)

If Sock(Index).State <> sckClosed Then

Sock(Index).Close

End If

ConnectState(Index) = FREE

End Sub

'接收数据

Private Sub Sock_DataArrival(Index As Integer, ByVal bytesTotal As Long)

Dim dx As String

StatusBar1.Panels(1).Text = "数据来自" & Sock(Index).LocalIP

Sock(Index).GetData dx, vbString

Text1.Text = Text1.Text & "[" & Sock(Index).LocalIP & "]" & dx & vbCrLf

End Sub

'寻找空闲的sock

Public Function FindFreeSocket()

Dim SockCount, i As Integer

SockCount = UBound(ConnectState)

For i = 0 To SockCount

If ConnectState(i) = FREE Then

FindFreeSocket = i

Exit Function

End If

Next i

ReDim Preserve ConnectState(0 To SockCount + 1)

FindFreeSocket = UBound(ConnectState)

End Function

Private Sub Text1_Change()

On Error Resume Next

Dim i As Integer

For i = 1 To Sock.Count - 1

Sock(i).SendData Text1.Text

Next i

End Sub

服务端有两个winsoc控件,一个命名为:Listener,另一个命名为:sock,并且设置index属性为0

窗体设计参照我这个大概就差不多了。

xiaozhuzhuyu
2010-05-14
知道答主
回答量:1
采纳率:0%
帮助的人:0
展开全部
这个 你要用TCP 还是UDP 如果是UDP的话可以开启多个winsock控件 winsock1 winsock2 等
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
bater2000
2010-05-14 · TA获得超过1486个赞
知道小有建树答主
回答量:803
采纳率:0%
帮助的人:1064万
展开全部
Winsock用起来很简单的

服务器只要有本地端口和IP就行了。客户端只要知道服务器端口和IP,然后用Connect方法连接。服务器端收到连接请求后,安排一个空闲的Winsock用Accept方法接受连接请求。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式