VB实现自动取得服务器IP并连接服务器(利用UDP广播)

前端之家收集整理的这篇文章主要介绍了VB实现自动取得服务器IP并连接服务器(利用UDP广播)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

普通的讲解WINSOCK控件等网络控件的用法的资料中,无论是使用TCP还是UDP,客户端程序连接服务端程序时,无一例外的要指定IP地址(或机器名)和端口号,那么,在端口已知而服务端程序所在机器地址或名称未知的情况下,怎样实现客户端程序自动取得服务端IP并建立连接呢,笔者在实际编程中遇到了这种情况,并使用以下方法解决了这个问题。
这种方法就是服务器端添加两个Winsock控件,一个作为服务端,一个以UDP来广播本机IP,客户端也用UDP方式取得服务器IP,然后再将客户端改为TCP方式来向服务器发起连接。完整代码如下:


  1. '服务器端程序加代码(程序出处www.ibiancheng.cn)
  2. '新建一个工程,然后在窗体上放两个个Winsock控件,名为Winsock1Winsock2
  3. '一个定时器控件Timer1,Interval属性设置为1000(也可以自己设置)
  4. '---------------------向整个网络广播本机IP---------------------------
  5. Dim MeIp As String '储存本机IP
  6. Dim netmask As String '储存本机广播地址
  7. Dim maxconnext As Long
  8. Dim nowconnext() As Boolean
  9. '---------------------------------------------------------
  10. Private Sub Form_Load()
  11. Winsock1.Protocol = sckUDPProtocol
  12. Winsock1.RemotePort = 9400 '绑顶远程端口号9400
  13. MeIp = Winsock1.LocalIP '获得本机IP地址
  14. netmask = "127.0.0.255" '为本机广播地址,广播地址请按自己的IP计算
  15. '-----------------------------------------
  16. Winsock2(0).LocalPort = 1001
  17. Winsock2(0).Listen
  18. End Sub
  19. '-----------------------开始向整个网络广播本机IP--------------------------
  20. Private Sub Timer1_Timer() '向本网广播地址发送信息
  21. Winsock1.RemoteHost = netmask '向本网广播地址发送信息,内容是本机的IP地址
  22. Winsock1.SendData MeIp
  23. End Sub
  24. Private Sub Winsock2_Close(Index As Integer)
  25. Winsock2(Index).Close
  26. Winsock2(Index).LocalPort = 1001
  27. Winsock2(Index).Listen
  28. End Sub
  29. '服务器端收到客户端的连接请求,这里的代码可能有点问题,请自己重新写或联系我
  30. Private Sub Winsock2_ConnectionRequest(Index As Integer,ByVal requestID As Long)
  31. On Error Resume Next
  32. Dim i As Long
  33. If Index = 0 Then 'Winsock——Winsock(0)发生消息
  34. i = 1
  35. While i <= maxconnext And nowconnext(i) '在以前的Winsock中找到空闲的Winsock
  36. i = i + 1
  37. DoEvents
  38. Wend
  39. If i <= maxconnext Then '在当前装载的Socket中发现有用户已经离开
  40. Winsock2(i).LocalPort = 0 '使用现成的Socket
  41. Winsock2(i).Accept requestID '接收
  42. nowconnext(i) = True 'Winsock(i)被占用
  43. Else '在当前装载的Socket中没发现有用户离开
  44. maxconnext = maxconnext + 1 '当前接收端口增加
  45. Load Winsock2(maxconnext) '生成新的’ Winsock
  46. Winsock2(maxconnext).LocalPort = 0
  47. Winsock2(maxconnext).Accept requestID '接收
  48. ReDim Preserve nowconnext(maxconnext + 1)
  49. nowconnext(maxconnext) = True
  50. End If
  51. End If
  52. End Sub
  53. '-------------------------------------------------------
  54. '客户端程序(程序出处www.ibiancheng.cn)
  55. '新建一个工程,然后在窗体上放一个Winsock控件,名为Winsock1
  56. '-----------------------------
  57. Dim CanSend As String '保存服务端IP
  58. '----------------------------
  59. Private Sub Form_Load()
  60. '--------------------------------------
  61. Winsock1.Protocol = sckUDPProtocol '初始化连接方式
  62. Winsock1.Bind "9400" '9400端口侦听
  63. '----------------------------------------
  64. Winsock2.RemoteHost = "1001"
  65. End Sub
  66. '-----------------------------------------------------------
  67. Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
  68. DoEvents
  69. Dim DataArrival As String
  70. Dim Cip As String
  71. Winsock1.GetData DataArrival
  72. CanSend = DataArrival '取得服务端IP
  73. Winsock1.Close '断开连接
  74. Winsock1.LocalPort = 0 '改端口号为0
  75. Winsock1.Protocol = sckTCPProtocol ' 改变连接方式
  76. Winsock1.RemotePort = 1001 '设置服务器端口号
  77. Winsock1.RemoteHost = CanSend '请求连接服务器
  78. Winsock1.Connect
  79. End Sub

猜你在找的VB相关文章