Server:
Private Sub Form_Load()
If Me.Winsock1.State <> sckClosed Then Me.Winsock1.Close
Me.Winsock1.LocalPort = 4001
Me.Winsock1.Listen
End SubPrivate Sub Winsock1_ConnectionRequest(ByVal requestID As Long)
With Me.Winsock1
If .State <> sckClosed Then .Close
.Accept (requestID)
DoEvents
End With
End SubClient:
Private Sub cmdConnect_Click()
If Me.Winsock1.State <> sckClosed Then Me.Winsock1.Close
Me.Winsock1.RemoteHost = "10.65.145.28"
Me.Winsock1.RemotePort = 4001
Me.Winsock1.Connect
End SubPrivate Sub Winsock1_Connect()
MsgBox "Connect Success"
End Sub
Private Sub Form_Load()
If Me.Winsock1.State <> sckClosed Then Me.Winsock1.Close
Me.Winsock1.LocalPort = 4001
Me.Winsock1.Listen
End SubPrivate Sub Winsock1_ConnectionRequest(ByVal requestID As Long)
With Me.Winsock1
If .State <> sckClosed Then .Close
.Accept (requestID)
DoEvents
End With
End SubClient:
Private Sub cmdConnect_Click()
If Me.Winsock1.State <> sckClosed Then Me.Winsock1.Close
Me.Winsock1.RemoteHost = "10.65.145.28"
Me.Winsock1.RemotePort = 4001
Me.Winsock1.Connect
End SubPrivate Sub Winsock1_Connect()
MsgBox "Connect Success"
End Sub
请利用Wunsock本身的事件来处理。
例如,服务器处理客户的连接请求,应在
Private Sub Winsock1_ConnectionRequest(ByVal requestID As Long)最好看看MSDN中的例子。
1、在Server端指定监听端口并监听
Server:
Private Sub Form_Load()
If Me.Winsock1.State <> sckClosed Then Me.Winsock1.Close 'winsock复位
Me.Winsock1.LocalPort = 4001 '监听端口
Me.Winsock1.Listen '监听
End Sub'接到Client端的Connect要求触发的事件
Private Sub Winsock1_ConnectionRequest(ByVal requestID As Long)
With Me.Winsock1
If .State <> sckClosed Then .Close '把sock关闭以便进入对话状态
.Accept (requestID) '接受交易号(姑且这么叫),这样就和Client真正连上可以使用Send了
DoEvents
End With
End Sub
Private Sub cmdConnect_Click()
If Me.Winsock1.State <> sckClosed Then Me.Winsock1.Close
Me.Winsock1.RemoteHost = "10.65.145.28" '单机中就是你的机器
Me.Winsock1.RemotePort = 4001 '端口号必须和Server一致,否则就不知道连到哪里去了
Me.Winsock1.Connect
End SubPrivate Sub Winsock1_Connect() '连接成功的事件
MsgBox "Connect Success"
End Sub
在客户端的
Private Sub Form_Load()
Winsock1.LocalPort = 4000
Winsock1.CloseEnd Sub用这样写吗???
Private Sub connect_Click(Index As Integer)
If Me.Winsock1.State <> sckClosed Then Me.Winsock1.Close
Me.Winsock1.RemoteHost = "10.65.145.28"
Me.Winsock1.RemotePort = 4001
Me.Winsock1.connect
If Me.Winsock1.State = 7 Then
MsgBox "恭喜恭喜,您连接成功,请进行操作~!~", vbOKOnly + vbExclamation, "连接成功"
Else
MsgBox "对不起,未能与服务器连接,请重新连接~!~", vbOKOnly + vbExclamation, "连接失败"
End If
End Sub而在服务器端是这样的:
Private Sub Form_Load()
If Winsock1.State <> sckClosed Then Winsock1.Close
Me.Winsock1.RemotePort = 4001
Me.Winsock1.Listen
End Sub现在还是无法连接上,请给予改正
谢谢
Private Sub Winsock1_ConnectionRequest(ByVal requestID As Long)
With Me.Winsock1
If .State <> sckClosed Then .Close
.Accept (requestID)
DoEvents
End With
End Sub客护短为:
Private Sub cmdConnect_Click()
If Me.Winsock1.State <> sckClosed Then Me.Winsock1.Close
Me.Winsock1.RemoteHost = "10.65.145.28"
Me.Winsock1.RemotePort = 4001
Me.Winsock1.Connect
End SubPrivate Sub Winsock1_Connect()
MsgBox "Connect Success"
End Sub
VERSION 5.00
Object = "{248DD890-BB45-11CF-9ABC-0080C7E7B78D}#1.0#0"; "MSWINSCK.OCX"
Begin VB.Form Form1
Caption = "点对点通讯"
ClientHeight = 6330
ClientLeft = 60
ClientTop = 345
ClientWidth = 6855
Icon = "Form1.frx":0000
LinkTopic = "Form1"
ScaleHeight = 6330
ScaleWidth = 6855
StartUpPosition = 2 'CenterScreen
Begin VB.ListBox lstTo
BeginProperty Font
Name = "MS Sans Serif"
Size = 12
Charset = 0
Weight = 400
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 2460
ItemData = "Form1.frx":030A
Left = 90
List = "Form1.frx":030C
TabIndex = 5
TabStop = 0 'False
Top = 3225
Width = 6675
End
Begin MSWinsockLib.Winsock Winsock1
Left = 6345
Top = 2790
_ExtentX = 741
_ExtentY = 741
_Version = 393216
End
Begin VB.CommandButton cmdConnect
Caption = "连接"
Height = 495
Left = 4725
TabIndex = 4
TabStop = 0 'False
Top = 2655
Width = 1215
End
Begin VB.TextBox txtIP
Height = 300
Left = 1500
TabIndex = 3
TabStop = 0 'False
Text = "192.168.1.68"
Top = 2760
Visible = 0 'False
Width = 2745
End
Begin VB.CheckBox chkServer
Caption = "服务器"
Height = 330
Left = 120
TabIndex = 2
TabStop = 0 'False
Top = 2745
Visible = 0 'False
Width = 1215
End
Begin VB.TextBox txtMemo
BeginProperty Font
Name = "MS Sans Serif"
Size = 12
Charset = 0
Weight = 400
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 360
Left = 75
TabIndex = 1
Top = 5805
Width = 6675
End
Begin VB.ListBox lstFrom
BeginProperty Font
Name = "MS Sans Serif"
Size = 12
Charset = 0
Weight = 400
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 2460
ItemData = "Form1.frx":030E
Left = 120
List = "Form1.frx":0310
TabIndex = 0
TabStop = 0 'False
Top = 150
Width = 6615
End
End
Attribute VB_Name = "Form1"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Option ExplicitPrivate Sub chkServer_Click()
If Me.chkServer.Value Then
If Me.Winsock1.State <> sckClosed Then Me.Winsock1.Close
Me.Winsock1.LocalPort = 4001
Me.Winsock1.Listen
End If
End SubPrivate Sub cmdConnect_Click()
If Me.Winsock1.State <> sckClosed Then Me.Winsock1.Close
Me.Winsock1.RemoteHost = txtIP.Text
Me.Winsock1.RemotePort = 4001
Me.Winsock1.Connect
Call AddTo("呼叫")
End SubPrivate Sub Form_Load()
With nfIconData
.hwnd = Me.hwnd
.uID = Me.Icon
.uFlags = NIF_ICON Or NIF_MESSAGE Or NIF_TIP
.uCallbackMessage = WM_MOUSEMOVE
.hIcon = Me.Icon.Handle
.szTip = "点对点通讯系统" & Chr$(0)
.cbSize = Len(nfIconData)
End With
Call Shell_NotifyIcon(NIM_ADD, nfIconData)
Call chkServer_Click
End SubPublic Sub AddTo(ByVal pstrTemp As String)
lstTo.AddItem (pstrTemp)
lstTo.ListIndex = lstTo.ListCount - 1
DoEvents
Me.txtMemo.SetFocus
End SubPublic Sub AddFrom(ByVal pstrTemp As String)
lstFrom.AddItem (pstrTemp)
lstFrom.ListIndex = lstFrom.ListCount - 1
DoEvents
Me.txtMemo.SetFocus
End SubPrivate Sub Form_Resize()
'If Me.WindowState = 1 Then
' Me.BorderStyle = 0
'Else
' Me.BorderStyle = 2
'End If
End SubPrivate Sub Form_Unload(Cancel As Integer)
Call Shell_NotifyIcon(NIM_DELETE, nfIconData)
End SubPrivate Sub lstFrom_DblClick()
Me.lstFrom.Clear
Me.txtMemo.SetFocus
End SubPrivate Sub lstTo_DblClick()
Me.lstTo.Clear
Me.txtMemo.SetFocus
End SubPrivate Sub txtMemo_KeyDown(KeyCode As Integer, Shift As Integer)
If KeyCode = 13 Then
If UCase(Me.txtMemo.Text) = "/SHOW" Then
Me.chkServer.Visible = True
Me.txtIP.Visible = True
Me.txtMemo.Text = ""
Exit Sub
End If
If Len(Trim(Me.txtMemo.Text)) > 0 Then
Call SendInfo(Me.txtMemo.Text)
If Left(Trim(Me.txtMemo.Text), 1) <> "/" Then
Call AddTo(Me.txtMemo.Text)
End If
Me.txtMemo.Text = ""
End If
End If
End SubPrivate Sub Winsock1_Close()
Call chkServer_Click
MsgBox "对方退出"
End SubPrivate Sub Winsock1_Connect()
Call AddFrom("连接成功")
End SubPrivate Sub Winsock1_ConnectionRequest(ByVal requestID As Long)
With Me.Winsock1
If .State <> sckClosed Then .Close
.Accept (requestID)
DoEvents
'Call SendInfo("连接成功")
Call AddFrom("连接成功")
End With
End SubPrivate Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
Dim strTemp As String
With Me.Winsock1
.GetData strTemp
Select Case UCase(Left(strTemp, 2))
Case "/T"
Me.Caption = Right(strTemp, Len(strTemp) - 2)
Case Else
Call AddFrom(strTemp)
End Select
End With
End SubPublic Sub SendInfo(ByVal pstr As String)
On Error Resume Next
Me.Winsock1.SendData pstr
End Sub
Winsock1.RemoteHost = "192.168.1.2"
Winsock1.RemotePort = 1234
Winsock1.Connect服务器端应该设定侦听端口
Winsock1.LocalPort = Val(Text3.Text)
Winsock1.Listen
服务器端不用设置RemoteHost属性,因为连接后会自动将远程连接的计算机IP地址设定到RemoteHost上。
创建套接字并将其设置为侦听模式。该方法仅适用于 TCP 连接。语法object.Listenobject 所在处代表一个对象表达式,其值是“应用于”列表中的对象。参数None返回值Void说明当有新连接时就会出现 ConnectionRequest 事件。处理 ConnectionRequest 事件时,应用程序应该(在一个新的控件示例上)用 Accept 方法接受连接。
Accept 方法
仅适用于 TCP 服务器应用程序。在处理 ConnectionRequest 事件时用这个方法接受新连接。语法object.Accept requestIDobject 所在处代表对象表达式,其值是“应用于”列表中的对象。数据类型Long返回值 Void说明在 ConnectionRequest 事件中使用 Accept 方法。ConnectionRequest 事件有一个对应的参数,即 RequestID 参数,该参数应该传给 Accept 方法。请看下例:Private Sub Winsock1_ConnectionRequest (ByVal requestID As Long)
'测试 State 属性,如果当前连接是打开的话,
'则关闭连接。
If Winsock1.State <> sckClosed Then Winsock1.Close '将 requestID 参数值传递给 Accept 方法。
Winsock1.Accept requestID
End Sub应该在新的控件示例(不是侦听状态下的示例)中使用 Accept 方法。!!!!!!