VB6を使用していて、LAN上で動作するチャットアプリケーションを作成したいと思います。WinSockコントロールを使用しましたが、Listen()
関数を実行すると、ソケットは127.0.0.1でリッスンし、LAN上のコンピューターのIPではリッスンしません。
なんで?LAN上のIPでリッスンする方法はありますか?
通常は、メソッドを呼び出してBind
ローカルポートを設定し、オプションで使用するアダプターのローカルIPアドレスを指定します。デフォルトでは、システムのプライマリアダプタになります。Listen
その後、引数なしで呼び出します。
スキップBind
して設定することもできLocalPort
ますがListen
、単純な単一接続サーバーのシナリオを除いてはお勧めできません。
ただし、ループバックアドレスがデフォルトで選択されている理由はそのいずれにも説明されていません。ボックス上のある種のネットワーク構成の問題のように聞こえます。
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
RemoteHost
サーバーがリッスンするネットワークアドレスを決定するためにリッスンするときに、コントロールにプロパティを設定できると思います。すべてのネットワークインターフェイスでリッスンするには、次を使用できる場合があります。
WinSock1.RemoteHost = "0.0.0.0"
WinSock1.Lsten()