1)Command1:退出按钮; (2)textsend:发送数据文本框; (3)Winsockserver: 服务器Winsock; (4)textget :接收数据文本框。 服务器程序的界面如图所示。 服务器程序的源代码如下: Private Sub Command1_Click() End End Sub Private Sub Form_Load() textsend.Visible = False textget.Visible = False Winsockserver.LocalPort = 1001 Winsockserver.Listen End Sub Private Sub textsend_Change() Winsockserver.SendData textsend.Text End Sub Private Sub Winsockserver_Close() Winsockserver.Close End End Sub Private Sub Winsockserver_ConnectionRequest(ByVal requestID As Long) textsend.Visible = True textget.Visible = True If Winsockserver.State <> sckClosed Then Winsockserver.Close Winsockserver.Accept requestID End Sub Private Sub Winsockserver_DataArrival(ByVal bytesTotal As Long) Dim tmpstr As String Winsockserver.GetData tmpstr textget.Text = tmpstr End Sub 客户机程序使用的控件如下: (1)Command1:退出按钮; (2)Command2:连接按钮; (3)Winsockclient:客户Winsock; (4)Text1:主机名文本框; (5)Textsend:发送数据文本框; (6)Textget:接收数据文本框; 客户机程序的界面如图所示。 客户机程序的源代码如下: Private Sub Command1_Click() End End Sub Private Sub Command2_Click() Winsockclient.Connect End Sub Private Sub Form_Load() textsend.Visible = False textget.Visible = False Winsockclient.RemotePort = 1001 Winsockclient.RemoteHost = "sccdsz" End Sub Private Sub Text1_Change() Winsockclient.RemoteHost = Text1.Text End Sub Private Sub textsend_Change() Winsockclient.SendData textsend.Text End Sub Private Sub Winsockclient_Close() Winsockclient.Close End End Sub Private Sub winsockclient_Connect() textsend.Visible = True textget.Visible = True Command2.Visible = False End Sub Private Sub winsockclient_DataArrival(ByVal bytesTotal As Long) Dim tmpstr As String Winsockclient.GetData tmpstr textget.Text = tmpstr End Sub
Private Sub form_Load()
With Me
.SckServer(0).LocalPort = 1001 '本地端口
.SckServer(0).Listen '开始监听
End With
End SubPrivate Sub Form_Unload(Cancel As Integer)
Dim i As Long
For i = 1 To SckServer.Count - 1
If SckServer(i).State = 7 Then
SckServer(i).Close
End If
Next
SckServer(0).CloseEnd SubPrivate Sub SckServer_Close(Index As Integer)
Me.SckServer(Index).Close
Me.SckServer(Index).Tag = ""
End SubPrivate Sub sckServer_ConnectionRequest(Index As Integer, ByVal requestID As Long)
Dim i As Long, l As Boolean, cou As Long, flag As Long
cou = 0
For i = 1 To Me.SckServer.Count - 1
If Me.SckServer(i).State = 0 And Not l Then
Me.SckServer(i).Accept (requestID)
flag = i
l = True
Else
cou = cou + 1
End If
Next
If Not l Then
i = Me.SckServer.Count
Load Me.SckServer(i)
flag = i
Me.SckServer(i).Accept (requestID)
End IfEnd Sub
Private Sub sckServer_DataArrival(Index As Integer, ByVal bytesTotal As Long)
Dim strData As String
SckServer(Index).GetData strData
Text1.Text = strData
End If
End SubPrivate Sub SckServer_Error(Index As Integer, ByVal Number As Integer, Description As String, ByVal Scode As Long, ByVal Source As String, ByVal HelpFile As String, ByVal HelpContext As Long, CancelDisplay As Boolean)
Call SckServer_Close(Index)
End Sub
客户端:添加一个winsock控件(名为sckclient),添加2个text控件(名为text1和text2),text1用来显示是否和服务器连接成功的信息,TEXT2则用来写发送到服务端的信息,2个command按钮控件(名为command1和command2)command1用来发送信息到服务端,command2则为退出.Private Sub form_Load()
With Me
.sckClient.RemoteHost = "192.168.0.46" '设置远程IP,本例设为本机。
.sckClient.RemotePort = 1001 '远程端口,就为server中的设置一样.
End With
sckClient.Connect
Text1.Text = "正在测试连接....."
End SubPrivate Sub Form_Unload(Cancel As Integer)
If Me.sckClient.State = 7 Then Me.sckClient.Close
' sckClient.SendData "QUIT"
End Sub
Private Sub Command1_Click()
sckclient.sendata text2.text
End Sub
Private Sub Command2_Click()
end
End SubPrivate Sub sckClient_Close()
sckClient.Close
Text1.Text = "服务器未开启"
End SubPrivate Sub sckClient_Connect()
Text1.Text = "连接成功"
End SubPrivate Sub sckClient_ConnectionRequest(ByVal requestID As Long)
With Me
If .sckClient.State <> sckClosed Then .sckClient.Close
.sckClient.Accept (requestID)
End With
End SubPrivate Sub sckClient_DataArrival(ByVal bytesTotal As Long)
On Error Resume Next
Dim strData As String
sckClient.GetData strData
Text1.Text = strData
End SubPrivate Sub sckClient_Error(ByVal Number As Integer, Description As String, ByVal Scode As Long, ByVal Source As String, ByVal HelpFile As String, ByVal HelpContext As Long, CancelDisplay As Boolean)
Call sckClient_Close
End Sub本代码经过测试~~绝对没问题~~
Private Sub sckClient_DataArrival(ByVal bytesTotal As Long)
On Error Resume Next
Dim strData As String
sckClient.GetData strData
Text1.Text = strData
End Sub
这段代码就是接收信息的~~
text1.text=strdata是显示接收到的数据~~接收到信息后具体怎样做就要看你要实现什么功能了~
Private Sub sckServer_DataArrival(Index As Integer, ByVal bytesTotal As Long)
Dim strData As String
SckServer(Index).GetData strData
Text1.Text = strData
End If
End Sub这里的text1.text=strdata下面你可以加一句
sckserver.sendata "OK"就是服务端接收到客户端发来的信息后在服务端的TEXT1中显示出来~再向客户端发送"OK"信息
客户端的TEXT1就会显示"OK"
Private Sub sckServer_DataArrival(Index As Integer, ByVal bytesTotal As Long)
Dim strData As String
SckServer(Index).GetData strData
Text1.Text = strData
End If
End Sub
的end if 这句不要~打多了
.SckServer(0).Listen '开始监听
好像不太对阿
Private Sub sckServer_DataArrival(Index As Integer, ByVal bytesTotal As Long)
Dim strData As String
SckServer(Index).GetData strData
Text1.Text = strData
End If
End Sub
这个里面都没有if子句 怎么就end if 呢?
当你关闭服务器端的时候
Private Sub Form_Unload(Cancel As Integer)
If Me.sckClient.State = 7 Then Me.sckClient.Close
' sckClient.SendData "QUIT"
End Sub
Private Sub Command1_Click()
sckclient.sendata text2.text
End Sub
Private Sub Command2_Click()
end
End Sub
会报错 未找到犯方法或数据成员 是不是因为没有定义count
我这个是在服务器端编写程序好程序让其运行,运行后什么都不做将其关闭就会报错
另外我还有一个问题 SckServer(0)中(0)这是什么意思? 不是在服务器端定义了一个winsock控件吗???
For i = 1 To SckServer.Count - 1
If SckServer(i).State = 7 Then
SckServer(i).Close
End If
Next
这句是什么意思?有这个SckServer.Count方法吗?
报错的时候说未找到方法或数据成员