| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 985 人关注过本帖
标题:使用VB的WinSock控件编写的服务器和客户端程序,连接不上
只看楼主 加入收藏
wang12zhe
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2015-1-15
结帖率:0
收藏
已结贴  问题点数:2 回复次数:7 
使用VB的WinSock控件编写的服务器和客户端程序,连接不上
客户端程序
Private Sub cmdConnect_Click()
    '调用 Connect 方法,初始化连接。
   'tcpClient.Connect
   tcpClient.RemoteHost = "192.168.2.100"   '"192.168.2.100"
   tcpClient.LocalPort = 2000
   tcpClient.Connect
   Print tcpClient.State  '显示当前状态
End Sub

Private Sub Form_Load()
   'Winsock 控件的名字为 tcpClient。
   '注意:要指定远程主机,可以使用
   ' IP 地址(例如:"121.111.1.1"),也可以使用
   '计算机的“好听的名字”如下所示。
  ' tcpClient.RemoteHost = "K4GBIDX1UPOP4JA"
  ' tcpClient.RemotePort = 2000
End Sub

Private Sub tcpClient_DataArrival(ByVal bytesTotal As Long)
   Dim strData As String
   tcpClient.GetData strData
   txtOutput.Text = strData
End Sub

Private Sub Timer1_Timer()
  Print tcpClient.State    '定时显示连接状态
End Sub

Private Sub txtSend_Change()
   tcpClient.SendData (txtSend.Text)
End Sub


服务器程序



Private Sub Form_Load()
'将 LocalPort 属性设置为一个整数。
'然后调用 Listen 方法。

tcpServer.LocalPort = 2000
tcpServer.Listen
  
frmClient.Show                     '显示客户端的窗体。
End Sub

Private Sub tcpServer_Connect()
 '检查控件的 State 属性是否为关闭的。
'如果不是,
'在接受新的连接之前先关闭此连接。
MsgBox ("Connect")
If tcpServer.State <> sckClosed Then _
tcpServer.Close
'接受具有 requestID 参数的
'连接。
tcpServer.Accept = requestID
End Sub

Private Sub tcpServer_DataArrival(ByVal bytesTotal As Long)
 '为进入的数据声明一个变量。
'调用 GetData 方法,并将数据赋予名为 txtOutput
'的 TextBox 的 Text 属性。
Dim strData As String
tcpServer.GetData strData
txtOutput.Text = strData

End Sub



Private Sub txtSendData_Change()
 '名为 txtSendData 的 TextBox 控件中
'包含了要发送的数据。当用户往文本框中
'键入数据时,使用 SendData 方法
'发送输入的字符串。
tcpServer.SendData (txtSendData.Text)

End Sub


第一次使用WinSock控件,总是连接不上,请大神帮忙看看为什么

我是在一个VB工程里建立的两个窗口,一个做服务器窗口,一个做客户端窗口,

客户端程序里有个
   tcpClient.RemoteHost = "192.168.4.100"   这个必须是电脑的实际IP吗?
搜索更多相关主题的帖子: 好听的名字 计算机 服务器 客户端 
2015-01-15 21:46
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4947
专家分:30084
注 册:2008-10-15
收藏
得分:1 
Private Sub cmdConnect_Click()
    '调用 Connect 方法,初始化连接。
   'tcpClient.Connect
   tcpClient.RemoteHost = "192.168.2.100"   '"192.168.2.100"              
'这个IP,要求写对远程的IP或域名。本机可以写成 127.0.0.1
   tcpClient.LocalPort = 2000                  '这行错了,这里是指定本地地址,这里应该是指定远端地址。 RemotePort
   tcpClient.Connect
   Print tcpClient.State  '显示当前状态
End Sub
----------------
Private Sub tcpServer_Connect()
'检查控件的 State 属性是否为关闭的。
'如果不是,
'在接受新的连接之前先关闭此连接。
MsgBox ("Connect")
If tcpServer.State <> sckClosed Then _
tcpServer.Close
'接受具有 requestID 参数的
'连接。
tcpServer.Accept = requestID          '可以使用一个新的 winsock 来接受连接。
End Sub

授人于鱼,不如授人于渔
早已停用QQ了
2015-01-16 08:25
lianyicq
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:26
帖 子:737
专家分:3488
注 册:2013-1-26
收藏
得分:1 
客户端代码中,远程主机名字和端口都注释掉了?
不明白所说的实际IP地址是什么意思?想来是内网和外网IP地址吧。如果你在内网连,就用内网IP,在外网,当然就用外网IP。

大开眼界
2015-01-16 09:35
wang12zhe
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2015-1-15
收藏
得分:0 
回复 3楼 lianyicq
客户端程序
Private Sub cmdConnect_Click()
    '调用 Connect 方法,初始化连接。
   'tcpClient.Connect
   tcpClient.RemoteHost = "192.168.2.100"   '"192.168.2.100"     '远程主机名字和端口改成在这初始化的
   tcpClient.LocalPort = 2000
   tcpClient.Connect
   Print tcpClient.State  '显示当前状态
End Sub

Private Sub Form_Load()
   'Winsock 控件的名字为 tcpClient。
   '注意:要指定远程主机,可以使用
   ' IP 地址(例如:"121.111.1.1"),也可以使用
   '计算机的“好听的名字”如下所示。
  ' tcpClient.RemoteHost = "K4GBIDX1UPOP4JA"
  ' tcpClient.RemotePort = 2000
End Sub

不明白所说的实际IP地址是什么意思?想来是内网和外网IP地址吧。如果你在内网连,就用内网IP,在外网,当然就用外网IP
假如我的电脑IP是192.168.1.66
那tcpClient.RemoteHost = "192.168.1.66" 必须这样写吗?不能是其他的IP?

我是在同一台计算机上尝试的,同一个工程的的两个窗口,一个做客户端窗口  一个做服务器窗口
2015-01-16 11:19
lianyicq
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:26
帖 子:737
专家分:3488
注 册:2013-1-26
收藏
得分:0 
同一台机器,当然客户端和服务器端IP地址是一样。我以前也是先在同一机器上调试。
注意,客户端和服务器端的WINSOCK控件不能用一个端口
写了个简单的程序,一个窗体上两个WINSOCK控件,两个文本框,两个按钮。自己看效果。
程序代码:
Private Sub Command1_Click()
Winsock1.SendData (Text1.Text)
End Sub

Private Sub Command2_Click()
Winsock2.Connect
End Sub

Private Sub Form_Load()
Command1.Caption = "Send"
Command2.Caption = "Connect"
Text1.Text = ""
Text2.Text = ""
Winsock1.LocalPort = 2500
Winsock2.RemoteHost = "127.0.0.1"
Winsock2.RemotePort = 2500
Winsock2.LocalPort = 2501
Winsock1.Listen
End Sub

Private Sub Form_Unload(Cancel As Integer)
Winsock1.Close
Winsock2.Close
End Sub

Private Sub Winsock1_ConnectionRequest(ByVal requestID As Long)
If Winsock1.State <> sckClosed Then Winsock1.Close
Winsock1.Accept (requestID)
While Winsock1.State = sckClosed
DoEvents
Wend
Form1.Caption = "OK"
End Sub

Private Sub Winsock2_DataArrival(ByVal bytesTotal As Long)
Dim strData As String
Winsock2.GetData strData
Text2.Text = strData
End Sub




[ 本帖最后由 lianyicq 于 2015-1-16 12:13 编辑 ]

大开眼界
2015-01-16 11:31
wang12zhe
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2015-1-15
收藏
得分:0 
回复 2楼 风吹过b
还是不行
2015-01-16 19:22
xzlxzlxzl
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:湖北
等 级:贵宾
威 望:125
帖 子:1091
专家分:5825
注 册:2014-5-3
收藏
得分:1 
速度一个简易tcp连接的聊天,已生成可执行的exe在压缩附件里了。多个客户端只能和服务器聊,想客户端之间聊则需要添加相关代码,自定义协议让服务器分发。

服务器代码
程序代码:
Sub initTcp()
  '初始化winsocket控件
  Dim s As Winsock
  On Error Resume Next
  For Each s In tcpServer
    If s.Index <> 0 Then
      s.Close
      Unload s
    Else
      s.Close
      s.Protocol = sckTCPProtocol
      s.LocalPort = 9704
      s.Listen
    End If
  Next
End Sub

Private Sub Command1_Click()
  Dim i As Integer, a As String
  For i = 1 To tcpServer.Count - 1
    If tcpServer(i).State = sckConnected Then
      a = tcpServer(i).RemoteHostIP & ":" & tcpServer(i).RemotePort
      If a = Combo1 Then
        tcpServer(i).SendData Text2
        Text1 = Text1 & Time & " 你对" & a & "说:" & Text2 & vbCrLf
        Exit For
      End If
    End If
  Next
End Sub

Private Sub Form_Load()
  If App.PrevInstance Then End  '禁止重复运行
  Combo1.Clear
  Text1 = ""
  Text2 = ""
  initTcp
End Sub

Private Sub Form_Unload(Cancel As Integer)
  End
End Sub

Private Sub tcpServer_Close(Index As Integer)
  Dim a As String
  tcpServer(Index).Close
  a = Combo1
  Combo1.Clear
  For i = 1 To tcpServer.Count - 1
    If tcpServer(i).State = sckConnected Then Combo1.AddItem tcpServer(i).RemoteHostIP & ":" & tcpServer(i).RemotePort
  Next
  For i = 0 To Combo1.ListCount - 1
    If a = Combo1.List(i) Then
      Combo1 = a
      Exit For
    End If
  Next
  
End Sub

Private Sub tcpServer_ConnectionRequest(Index As Integer, ByVal requestID As Long)
  '有客户端连接请求
  Dim i As Integer, a As String
  For i = 1 To tcpServer.Count - 1
    If tcpServer(i).State = sckClosed Or tcpServer(i).State = sckClosing Then Exit For
  Next
  If i = tcpServer.Count Then Load tcpServer(i)
  tcpServer(i).Accept requestID
  a = Combo1
  Combo1.Clear
  For i = 1 To tcpServer.Count - 1
    If tcpServer(i).State = sckConnected Then Combo1.AddItem tcpServer(i).RemoteHostIP & ":" & tcpServer(i).RemotePort
  Next
  Combo1 = a
End Sub

Private Sub tcpServer_DataArrival(Index As Integer, ByVal bytesTotal As Long)
  Dim a As String, b As String
  a = tcpServer(Index).RemoteHostIP & ":" & tcpServer(Index).RemotePort
  tcpServer(Index).GetData b, vbString
  Text1 = Text1 & Time & " " & a & "对你说:" & b & vbCrLf
End Sub


客户端代码
程序代码:
Private Sub Command1_Click()
  Dim b() As String, i As Integer
  b = Split(Text1, ".")
  If UBound(b) <> 3 Then
    MsgBox "ip地址格式错误,请检查"
    Exit Sub
  End If
  tcpClient.Protocol = sckTCPProtocol
  tcpClient.RemoteHost = Text1
  tcpClient.RemotePort = 9704
  tcpClient.Connect
End Sub

Private Sub Command2_Click()
  tcpClient.Close
  Command1.Enabled = True
  Command2.Enabled = False
End Sub

Private Sub Command3_Click()
  tcpClient.SendData Text3
  Text2 = Text2 & Time & " 你对" & tcpClient.RemoteHostIP & "说:" & Text3 & vbCrLf
End Sub

Private Sub Form_Load()
  Text1 = "127.0.0.1"
  Text2 = ""
  Text3 = ""
  Command2.Enabled = False
End Sub

Private Sub tcpClient_Close()
  Command2_Click
  tcpClient.Close
End Sub

Private Sub tcpClient_Connect()
  Command1.Enabled = False
  Command2.Enabled = True
End Sub

Private Sub tcpClient_DataArrival(ByVal bytesTotal As Long)
  Dim a As String, b As String
  tcpClient.GetData b, vbString
  Text2 = Text2 & Time & " " & tcpClient.RemoteHostIP & "对你说:" & b & vbCrLf
End Sub

Private Sub tcpClient_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)
  tcpClient.Close
End Sub

tcp连接.rar (16.58 KB)
2015-01-16 22:17
sj476606729
Rank: 2
等 级:论坛游民
威 望:1
帖 子:8
专家分:38
注 册:2015-1-17
收藏
得分:1 
给个最简单的先了解一下,测试自己的ip,text1发送给text2,先连接在发送,保证成功,服务端名称为sever 客户端winsock控件名称为client
   Private Sub Form_Load()
server.LocalPort = 123
server.Bind
server.Listen
End Sub

Private Sub client_Connect()
MsgBox "连接成功"
End Sub


Private Sub fasong_Click()
client.SendData Text1.Text
End Sub


Private Sub lianjie_Click()
client.RemoteHost = client.LocalIP
client.RemotePort = 123
client.Connect
End Sub

Private Sub server_ConnectionRequest(ByVal requestID As Long)
If server.State <> sckClosed Then
    server.Close
End If
server.Accept requestID
End Sub

Private Sub server_DataArrival(ByVal bytesTotal As Long)
server.GetData s, vbString
If s <> "" Then Text2.Text = s
End Sub
2015-01-17 23:17
快速回复:使用VB的WinSock控件编写的服务器和客户端程序,连接不上
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.042881 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved