需要在winsock控件中添加功能

Posted

技术标签:

【中文标题】需要在winsock控件中添加功能【英文标题】:Need to add functionality in winsock control 【发布时间】:2014-01-08 13:28:39 【问题描述】:

我正在创建一个应用程序,其中包括客户端和代理服务器应用程序。两个应用程序都使用 winsock 控件。我正在使用 IP 地址将客户端连接到服务器。服务器应用程序有问题。它只显示内部我不想要的IP地址,我想要的是外部IP地址,即Wan IP地址。winsock可以吗?如果您有示例代码,请提供。另外我需要一个功能服务器,它将选择连接到服务器的客户端在列表框中,它将断开该客户端与服务器的连接。请提供代码。此外,一旦连接到服务器,如果用户使用 Internet 或任何其他程序,IP 将显示为服务器的 IP(如代理服务器)。 这是服务器的代码。

Option Explicit
Dim iSockets As Integer
Dim sServerMsg As String
Dim sRequestID As String

Private Sub Form_Load()

    Form1.Show
    lblHostID.Caption = Socket(0).LocalHostName
    lblAddress.Caption = Socket(0).LocalIP
    Socket(0).LocalPort = 1007
    sServerMsg = "Listening to port: " & Socket(0).LocalPort
    List1.AddItem (sServerMsg)
    Socket(0).Listen
End Sub

Private Sub socket_Close(Index As Integer)
    sServerMsg = "Connection closed: " & Socket(Index).RemoteHostIP
    List1.AddItem (sServerMsg)
    Socket(Index).Close
    Unload Socket(Index)
    iSockets = iSockets - 1
    lblConnections.Caption = iSockets

End Sub

Private Sub socket_ConnectionRequest(Index As Integer, ByVal requestID As Long)
    sServerMsg = "Connection request id " & requestID & " from " & Socket(Index).RemoteHostIP
  If Index = 0 Then
    List1.AddItem (sServerMsg)
    sRequestID = requestID
    iSockets = iSockets + 1
    lblConnections.Caption = iSockets
    Load Socket(iSockets)
    Socket(iSockets).LocalPort = 1007
    Socket(iSockets).Accept requestID
  End If

End Sub

【问题讨论】:

【参考方案1】:

我使用以下代码显示哪些客户端连接到我的服务器

Private Sub wskServer_ConnectionRequest(ByVal requestID As Long)
  With wskServer
    If .State <> sckClosed Then
      .Close
    End If
    .Accept requestID
    ShowData "Connection from " & .RemoteHostIP & vbCrLf, True, vbBlack
  End With 'wskServer
End Sub

在我的例子中,showdata 函数以监控形式显示文本,但您可以将文本写入文件或简单的 msgbox

【讨论】:

显示的IP将是您的服务器看到的IP,因此如果您通过内部网络连接,那么它将显示内部IP 感谢您提供解决方案..它非常有帮助。现在我想要的是当客户端应用程序连接到服务器应用程序时(两者都使用winsock控制)客户端请求应该转发到主服务器从服务器应用程序..请提出一些如何实现这一点..需要我在服务器应用程序上进行一些编码..请提供示例代码..非常紧急。再次感谢 好的,我会接受这个作为答案并发布新问题,请对此发表评论

以上是关于需要在winsock控件中添加功能的主要内容,如果未能解决你的问题,请参考以下文章

winsock控件的TCP和UDP协议的判断问题

Excel 在VBA中可否调用winsock控件

VB如何使用Winsock进行1对多通信

VB6.0的winsock控件用UDP局域网广播数据,当数据很大时接收方报10040--数据包太大,请问怎么处理。

VB6 中的 Winsock 控件只向数组中的最后一个索引发送文本消息

VB中使用winsock控件要实现网络通信怎么编程?服务端和客户端都必须各编个程序吗?