给个例子你试一试!VERSION 5.00 Object = "{248DD890-BB45-11CF-9ABC-0080C7E7B78D}#1.0#0"; "MSWINSCK.OCX" Begin VB.Form Form1 ClientHeight = 5025 ClientLeft = 2925 ClientTop = 2400 ClientWidth = 7215 BeginProperty Font Name = "宋体" Size = 9 Charset = 134 Weight = 400 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty LinkTopic = "Form1" ScaleHeight = 5025 ScaleWidth = 7215 Begin MSWinsockLib.Winsock Winsock2 Left = 1590 Top = 2790 _ExtentX = 741 _ExtentY = 741 _Version = 393216 End Begin VB.CommandButton Command2 Caption = "&connect" Height = 465 Left = 5880 TabIndex = 3 Top = 4410 Width = 1185 End Begin VB.TextBox Text3 Height = 465 Left = 270 MultiLine = -1 'True ScrollBars = 2 'Vertical TabIndex = 2 Top = 3840 Width = 6795 End Begin VB.TextBox Text2 Height = 315 Left = 2400 TabIndex = 1 Text = "1001" Top = -360 Width = 2025 End Begin VB.TextBox Text1 Height = 315 Left = 270 TabIndex = 0 Text = "user" Top = 30 Width = 2025 End Begin MSWinsockLib.Winsock Winsock1 Left = 990 Top = 2790 _ExtentX = 741 _ExtentY = 741 _Version = 393216 End Begin VB.TextBox Text4 Height = 3315 Left = 270 Locked = -1 'True MultiLine = -1 'True ScrollBars = 2 'Vertical TabIndex = 4 Top = 420 Width = 6795 End End Attribute VB_Name = "Form1" Attribute VB_GlobalNameSpace = False Attribute VB_Creatable = False Attribute VB_PredeclaredId = True Attribute VB_Exposed = FalsePrivate Sub Command2_Click() Winsock1.Close Winsock1.RemoteHost = Text1.Text Winsock1.RemotePort = Val(Text2.Text) Winsock1.Connect ' Text1.Text, Val(Text2.Text) Form1.Caption = Winsock1.State End SubPrivate Sub Form_Load() 'Winsock1.Protocol = sckTCPProtocol Winsock2.LocalPort = 1001 Winsock2.Listen 'MsgBox Winsock2.LocalIP End SubPrivate Sub Text1_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then Call Command2_Click End If End SubPrivate Sub Text3_KeyPress(KeyAscii As Integer)If KeyAscii = 13 Then KeyAscii = 0 Winsock1.SendData Text3.Text Text4.Text = Text4.Text & Winsock2.LocalHostName & " say:" & Text3.Text ' & vbCrLf Text3.Text = "" End IfEnd Sub Private Sub Winsock2_ConnectionRequest(ByVal requestID As Long)If Winsock2.State <> sckClosed Then Winsock2.Close Winsock2.Accept requestID MsgBox "connect!" End SubPrivate Sub Winsock2_DataArrival(ByVal bytesTotal As Long) Dim ss As VariantCall Winsock2.GetData(ss, vbString, bytesTotal) Me.Text4.Text = Me.Text4.Text & vbCrLf & Winsock1.RemoteHost & " say:" & ss & vbCrLfEnd SubPrivate Sub Winsock3_ConnectionRequest(ByVal requestID As Long) MsgBox "!!!!!" End Sub
这时UDP的例子!Private Sub Command1_Click() Winsock1.SendData "aaaa!" End SubPrivate Sub Form_Load() With Winsock1 .RemoteHost = "176.1.3.68" .RemotePort = 1003 '*******通讯的机子的端口要不同的 .Bind 1004 End With End SubPrivate Sub Winsock1_DataArrival(ByVal bytesTotal As Long) Dim ss As String Winsock1.GetData ss, vbString, bytesTotal MsgBox ss End Sub '*****************************************Private Sub Command1_Click() Winsock1.SendData "aaaa!" End SubPrivate Sub Form_Load() With Winsock1 .RemoteHost = "176.1.3.68" .RemotePort = 1004 '*******通讯的机子的端口要不同的 .Bind 1003 End With End SubPrivate Sub Winsock1_DataArrival(ByVal bytesTotal As Long) Dim ss As String Winsock1.GetData ss, vbString, bytesTotal MsgBox ss End Sub
对了,做服务器可以不用设 remotehost
to newyon() 我和你用的方法一模一样!!! 但我的不行。在Winsock1.SendData "aaaa!"时会出现“所事物或请求的错误协议或连接状态”的错误!!
请检查你用的协议对不对。 然后,发送端只要指明远程地址和端口 接收端只要指明在哪个断口绑定。 例如: 客户端: sub form_load() winsock1.remotehost="127.0.0.1" winsock1.remoteport="999" winsock1.senddata "hi,i am sending a msg to you!" end sub服务器端: sub form_load() winsock1.bind 999,"127.0.0.1" end sub Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long) Dim ss As String Winsock1.GetData ss MsgBox ss End Sub
UDP不用listen的, ================== 服务器端: Private Sub Form_Load() Winsock1.Bind 1003, "127.0.0.1" End SubPrivate Sub Winsock1_DataArrival(ByVal bytesTotal As Long) Dim ss As String Winsock1.GetData ss, vbString, bytesTotal MsgBox ss End Sub客户端: Private Sub Command1_Click() Winsock1.SendData "aaaa!" End SubPrivate Sub Form_Load() With Winsock1 .RemoteHost = "127.0.0.1" .RemotePort = 1003 .Bind 1004 End With End Sub协议都设成:sckUDPProtocol ============================== ok!
Object = "{248DD890-BB45-11CF-9ABC-0080C7E7B78D}#1.0#0"; "MSWINSCK.OCX"
Begin VB.Form Form1
ClientHeight = 5025
ClientLeft = 2925
ClientTop = 2400
ClientWidth = 7215
BeginProperty Font
Name = "宋体"
Size = 9
Charset = 134
Weight = 400
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
LinkTopic = "Form1"
ScaleHeight = 5025
ScaleWidth = 7215
Begin MSWinsockLib.Winsock Winsock2
Left = 1590
Top = 2790
_ExtentX = 741
_ExtentY = 741
_Version = 393216
End
Begin VB.CommandButton Command2
Caption = "&connect"
Height = 465
Left = 5880
TabIndex = 3
Top = 4410
Width = 1185
End
Begin VB.TextBox Text3
Height = 465
Left = 270
MultiLine = -1 'True
ScrollBars = 2 'Vertical
TabIndex = 2
Top = 3840
Width = 6795
End
Begin VB.TextBox Text2
Height = 315
Left = 2400
TabIndex = 1
Text = "1001"
Top = -360
Width = 2025
End
Begin VB.TextBox Text1
Height = 315
Left = 270
TabIndex = 0
Text = "user"
Top = 30
Width = 2025
End
Begin MSWinsockLib.Winsock Winsock1
Left = 990
Top = 2790
_ExtentX = 741
_ExtentY = 741
_Version = 393216
End
Begin VB.TextBox Text4
Height = 3315
Left = 270
Locked = -1 'True
MultiLine = -1 'True
ScrollBars = 2 'Vertical
TabIndex = 4
Top = 420
Width = 6795
End
End
Attribute VB_Name = "Form1"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = FalsePrivate Sub Command2_Click()
Winsock1.Close
Winsock1.RemoteHost = Text1.Text
Winsock1.RemotePort = Val(Text2.Text)
Winsock1.Connect ' Text1.Text, Val(Text2.Text)
Form1.Caption = Winsock1.State
End SubPrivate Sub Form_Load()
'Winsock1.Protocol = sckTCPProtocol
Winsock2.LocalPort = 1001
Winsock2.Listen
'MsgBox Winsock2.LocalIP
End SubPrivate Sub Text1_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 Then
Call Command2_Click
End If
End SubPrivate Sub Text3_KeyPress(KeyAscii As Integer)If KeyAscii = 13 Then
KeyAscii = 0
Winsock1.SendData Text3.Text
Text4.Text = Text4.Text & Winsock2.LocalHostName & " say:" & Text3.Text ' & vbCrLf
Text3.Text = ""
End IfEnd Sub
Private Sub Winsock2_ConnectionRequest(ByVal requestID As Long)If Winsock2.State <> sckClosed Then Winsock2.Close
Winsock2.Accept requestID
MsgBox "connect!"
End SubPrivate Sub Winsock2_DataArrival(ByVal bytesTotal As Long)
Dim ss As VariantCall Winsock2.GetData(ss, vbString, bytesTotal)
Me.Text4.Text = Me.Text4.Text & vbCrLf & Winsock1.RemoteHost & " say:" & ss & vbCrLfEnd SubPrivate Sub Winsock3_ConnectionRequest(ByVal requestID As Long)
MsgBox "!!!!!"
End Sub
Winsock1.SendData "aaaa!"
End SubPrivate Sub Form_Load()
With Winsock1
.RemoteHost = "176.1.3.68"
.RemotePort = 1003 '*******通讯的机子的端口要不同的
.Bind 1004
End With
End SubPrivate Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
Dim ss As String
Winsock1.GetData ss, vbString, bytesTotal
MsgBox ss
End Sub
'*****************************************Private Sub Command1_Click()
Winsock1.SendData "aaaa!"
End SubPrivate Sub Form_Load()
With Winsock1
.RemoteHost = "176.1.3.68"
.RemotePort = 1004 '*******通讯的机子的端口要不同的
.Bind 1003
End With
End SubPrivate Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
Dim ss As String
Winsock1.GetData ss, vbString, bytesTotal
MsgBox ss
End Sub
我和你用的方法一模一样!!!
但我的不行。在Winsock1.SendData "aaaa!"时会出现“所事物或请求的错误协议或连接状态”的错误!!
在FORM_LOAD中加入 .Protocol = sckUDPProtocol控件默认的是TCP协议!你要用UDP的话要自己设!
然后,发送端只要指明远程地址和端口
接收端只要指明在哪个断口绑定。
例如:
客户端:
sub form_load()
winsock1.remotehost="127.0.0.1"
winsock1.remoteport="999"
winsock1.senddata "hi,i am sending a msg to you!"
end sub服务器端:
sub form_load()
winsock1.bind 999,"127.0.0.1"
end sub
Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
Dim ss As String
Winsock1.GetData ss
MsgBox ss
End Sub
现在我可以发出去 ,但收不到!
希望大家和我一起努力解决这个问题!!!
.RemotePort = 1004 '*******通讯的机子的端口要不同的
.Bind 1003服务器端口号
.RemotePort = 1003 '*******通讯的机子的端口要不同的
.Bind 1004两个端口要相对的
客户机的 remoteport 是服务器的 bind 反之也是这样!
如果是这样我可以帮你解决
==================
服务器端:
Private Sub Form_Load()
Winsock1.Bind 1003, "127.0.0.1"
End SubPrivate Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
Dim ss As String
Winsock1.GetData ss, vbString, bytesTotal
MsgBox ss
End Sub客户端:
Private Sub Command1_Click()
Winsock1.SendData "aaaa!"
End SubPrivate Sub Form_Load()
With Winsock1
.RemoteHost = "127.0.0.1"
.RemotePort = 1003
.Bind 1004
End With
End Sub协议都设成:sckUDPProtocol
==============================
ok!