2

VB6を使用していて、LAN上で動作するチャットアプリケーションを作成したいと思います。WinSockコントロールを使用しましたが、Listen()関数を実行すると、ソケットは127.0.0.1でリッスンし、LAN上のコンピューターのIPではリッスンしません。

なんで?LAN上のIPでリッスンする方法はありますか?

4

3 に答える 3

2

通常は、メソッドを呼び出してBindローカルポートを設定し、オプションで使用するアダプターのローカルIPアドレスを指定します。デフォルトでは、システムのプライマリアダプタになります。Listenその後、引数なしで呼び出します。

スキップBindして設定することもできLocalPortますがListen、単純な単一接続サーバーのシナリオを除いてはお勧めできません。

ただし、ループバックアドレスがデフォルトで選択されている理由はそのいずれにも説明されていません。ボックス上のある種のネットワーク構成の問題のように聞こえます。

于 2012-11-21T22:53:21.953 に答える
1

localportプロパティを設定する必要があります(そしてクライアントはそのポートに接続する必要があります)

'1 form with :
'  1 textbox : name=Text1
'  1 winsock control : name=Winsock1

Option Explicit

Private Sub Form_Load()
  Text1.Move 0, 0, ScaleWidth, ScaleHeight 'position the textbox
  With Winsock1
    .LocalPort = 5001                      'set the port to listen on
    .Listen                                'start listening
  End With 'Winsock1
End Sub

Private Sub Winsock1_ConnectionRequest(ByVal requestID As Long)
  With Winsock1
    If .State <> sckClosed Then .Close     'close the port when not closed (you could also use another winsock control to accept the connection)
    .Accept requestID                      'accept the connection request
  End With 'Winsock1
End Sub

Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
  Dim strData As String
  Winsock1.GetData strData                 'get the data
  ProcessData strData                      'process the data
End Sub

Private Sub Winsock1_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)
  MsgBox Description, vbCritical, "Error " & CStr(Number)
End Sub

Private Sub ProcessData(strData As String)
  Text1.SelText = strData                  'show the data
End Sub
于 2012-11-21T09:09:48.297 に答える
1

RemoteHostサーバーがリッスンするネットワークアドレスを決定するためにリッスンするときに、コントロールにプロパティを設定できると思います。すべてのネットワークインターフェイスでリッスンするには、次を使用できる場合があります。

WinSock1.RemoteHost = "0.0.0.0"
WinSock1.Lsten()
于 2012-11-21T08:21:43.977 に答える