使用winsock控件很容易做的
新建一工程,在“工程-部件”中添加一个"microsoft winsock control 6.0"部件,这时你会在左边控件栏中看到增加一个类似于两个小显示器的图标,这就是winsock控件,然后在form1的窗体中放一个combobox控件combo1,两个textbox控件text1、text2,其中text1的multiline属性为true(让它支持多行文本),一个commandbutton控件command1,一个winsock控件,名称改为wsck(默认名称为Winsock1),布局如下图:
复制下列代码即可做两台机器的通讯了,这个程序启动时首先搜索局域网中有没有同样的程序已经启动,如果没有则自动占用8888端口,把自己作为服务器,这时其他电脑上启动的这个程序会搜索到服务器,并只能作为客户端了,并在下拉列表中(combo1)显示客户端ip地址,选择一个ip即可与他发信息,目前只能做文本的通讯。
'下列代码粘贴到工程中即可
Const Bs = "~UDP~" '通讯联络开始标识
Private Sub Command1_Click()
If Trim(Text2) <> "" Then
Wsck.SendData Bs & "3" & Trim(Text2)
Text1 = Text1 & Time & " 你对" & Wsck.RemoteHostIP & "说:" & Text2 & vbCrLf
End If
End Sub
Private Sub Form_Load()
On Error GoTo err_CL
Wsck.Protocol = sckUDPProtocol
Combo1.Clear
If SearchServer Then Exit Sub '找到服务器的处理
Wsck.LocalPort = 8888
Wsck.Bind
Exit Sub
err_CL:
MsgBox "端口可能被占用,启动失败"
Unload Me
End Sub
Private Function SearchServer() As Boolean
'本过程扫描看有没有服务端等待通讯
Dim i As Integer, j As Integer, d As Date
SearchServer = False
Wsck.RemoteHost = "255.255.255.255" '广播地址
Wsck.RemotePort = 8888
Wsck.Bind
For i = 0 To 4
'发10次广播信息
Wsck.SendData Bs & "1" '广播求服务器信息
d = Time
While d = Time
DoEvents
Wend
Next
If Combo1.ListCount = 0 Then
Combo1.AddItem "我是服务器"
Combo1.Text = "我是服务器"
Wsck.Close
Else
SearchServer = True
Combo1 = Combo1.List(0)
End If
End Function
Private Sub Wsck_DataArrival(ByVal bytesTotal As Long)
Dim a As String, b() As String, i As Integer
Wsck.GetData a, vbString
b = Split(a, Bs): i = Val(Left(b(1), 1))
If i = 1 Then Wsck.SendData Bs & "2" & Wsck.LocalIP '数据1表明有客户连接,需向对方返回我的地址
If i = 2 Then Combo1.AddItem Right(b(1), Len(b(1)) - 1) '2表明是服务器送来的信息,将后面的ip都放进combo1中
If i = 3 Then Text1 = Text1 & Time & " " & Wsck.RemoteHostIP & "对你说:" & Right(b(1), Len(b(1)) - 1) & vbCrLf '聊天信息
End Sub
'代码结束