2 Stimmen

Listen() Funktion für Winsock

Ich benutze VB6 und möchte eine Chat-Anwendung erstellen, die im LAN funktioniert. Ich habe die WinSock-Steuerung verwendet, aber wenn ich die Funktion Listen() ausführe, lauscht mein Socket nur auf 127.0.0.1 und nicht auf die IP meines Computers im LAN.

Warum? Gibt es eine Möglichkeit, auf meiner IP im LAN zu lauschen?

2voto

Bob77 Punkte 13047

Normalerweise würden Sie die Methode Bind aufrufen, um den lokalen Port festzulegen und optional die lokale IP-Adresse des Adapters anzugeben, der verwendet werden soll. Es sollte standardmäßig der primäre Adapter Ihres Systems sein. Dann rufen Sie Listen ohne Argumente auf.

Sie können Bind überspringen und einfach LocalPort setzen und dann Listen aufrufen, aber das ist nicht ratsam, außer in einfachen Server-Szenarien mit einer einzigen Verbindung.

All das erklärt jedoch nicht, warum standardmäßig Ihre Loopback-Adresse ausgewählt wird. Klingt nach einem Problem mit der Netzwerkkonfiguration auf dem System.

1voto

DMI Punkte 6403

Ich glaube, du kannst die RemoteHost-Eigenschaft des Steuerelements festlegen, wenn du zuhörst, um zu bestimmen, auf welcher Netzwerkadresse der Server hören wird. Um auf alle Netzwerkschnittstellen zu hören, könntest du Folgendes verwenden:

WinSock1.RemoteHost = "0.0.0.0"
WinSock1.Lsten()

1voto

Hrqls Punkte 2879

Sie müssen die localport-Eigenschaft festlegen (und der Client muss mit diesem Port verbinden)

'1 Formular mit:
'  1 Textfeld : Name=Text1
'  1 Winsock-Steuerelement : Name=Winsock1

Option Explicit

Private Sub Form_Load()
  Text1.Move 0, 0, ScaleWidth, ScaleHeight 'positioniere das Textfeld
  With Winsock1
    .LocalPort = 5001                      'setze den Port auf den gehört werden soll
    .Listen                                'starte das Zuhören
  End With 'Winsock1
End Sub

Private Sub Winsock1_ConnectionRequest(ByVal requestID As Long)
  With Winsock1
    If .State <> sckClosed Then .Close     'schließe den Port, wenn nicht geschlossen (man könnte auch ein weiteres Winsock-Steuerelement verwenden, um die Verbindung zu akzeptieren)
    .Accept requestID                      'akzeptiere die Verbindungsanforderung
  End With 'Winsock1
End Sub

Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
  Dim strData As String
  Winsock1.GetData strData                 'hole die Daten
  ProcessData strData                      'verarbeite die Daten
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, "Fehler " & CStr(Number)
End Sub

Private Sub ProcessData(strData As String)
  Text1.SelText = strData                  'zeige die Daten an
End Sub

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X