2010-07-08 5 views
1

Bonjour, J'écris une application client/serveur socket dans VB6. i ont le code suivantContrôle winsock vb6 RemoteHostIP tronque le dernier chiffre de l'adresse IP

Private Sub sockMain_ConnectionRequest(ByVal requestID As Long) 
    If sockMain.State <> sckClosed Then 
     sockMain.Close 
    End If 
    sockMain.Accept requestID  
    Debug.Print "Accepted connection from: " & sockMain.RemoteHostIP & vbCrLf 
End Sub 

son impression de la propriété intellectuelle, mais le dernier chiffre est absent exemple, si ma connexion est de « 192.168.1.123 » il montre « 192.168.1.12 » ne

+0

Si la connexion par socket est établie, assurez-vous que la connexion est établie à partir de 192.168.1.123. Avez-vous vérifié quelle adresse IP est affichée comme adresse IP distante dans le logiciel tcpview? – ckv

+0

Si l'adresse IP affiche 192.168.1.123 alors je n'ai pas de problème avec les API de socket. Le problème sera avec la façon dont vous imprimez l'adresse IP. – ckv

+0

Je suis capable de voir la connexion active et capable de transférer des données, et dans le mode de débogage si je vérifie l'état de la connexion, le socket est en état Connecté seulement. il n'y a pas de problème avec la connexion. mais le contrôle RemoteHostIP montre toujours l'adresse IP en tronquant le dernier chiffre, est-ce que je connecte le client de local, je reçois 127.0.0. au lieu de 127.0.0.1 – Dharma

Répondre

0

I » J'ai essayé exactement le même code et cela fonctionne sur ma machine. J'ai essayé d'utiliser telnet de la même machine, et aussi d'un ordinateur portable et l'adresse IP correcte a été imprimée dans les deux cas.

Je dois être d'accord avec ckv et dire que c'est la façon dont vous imprimez RemoteHostIP.

+0

Si vous avez utilisé exactement le même code, vous devez avoir utilisé la même fonction pour imprimer l'adresse IP également? Donc, vous voulez dire avec le même code que Dharma a mentionné ci-dessus, vous obtenez une adresse IP correcte. – ckv

+0

Oui, je viens de coller le code de l'OP dans mon formulaire. – quamrana

+0

Salut CKV et quamrana, encore je ne comprends pas pourquoi dans mon système le dernier chiffre est manquant. Même si je mets une montre pour l'objet socket et que je le vérifie pendant le débogage, affiche toujours le RemoteHostIP en tronquant le dernier caractère. – Dharma

0

Il s'agit d'un bogue connu dans la mise à jour cumulative KB957924 du Service Pack 6 Microsoft Visual Basic 6.0 (link) dans les versions v1 et mai 2009 v2. C'est pourquoi certaines personnes peuvent le reproduire et d'autres non. Il est également limité à la deuxième utilisation et à la suite du contrôle.

Il est discuté .

Pour contourner ce problème vraiment moche, vous pouvez appeler recvfrom dans le wsock32.dll lib avec le sockMain.SocketHandle, un petit tampon et le paramètre MSG_PEEK (&H2) pour récupérer l'adresse de socket directement. Cela doit être fait avant d'appeler le sockMain.GetData(). Ensuite, vous devez analyser l'adresse IP vous-même. Je peux poster un code qui fait cela pour le cas spécifique que j'utilise (UDP) si demandé.

Je ne suis pas sûr que cela fonctionnera dans votre cas, car il semble que vous utilisez TCP et accepter.

Questions connexes