jyjuse 发表于 2010-4-7 06:40:29

从已经连接的套接字里获得IP[已解决]

本帖最后由 jyjuse 于 2010-4-9 05:57 编辑

如题,B客户端已经跟A服务端建立连接,在A服务端如何获得B客户端IP.

C.L 发表于 2010-4-7 08:09:22

B客户端向A服务端发送自已的IP

ccxw1983 发表于 2010-4-7 09:07:52

我到现在也不明白,2个在不同局域网的机器是怎么连在一起的,不知局域网的路由是如何工作的

jyjuse 发表于 2010-4-7 12:22:08

我不想用二楼的方法。因为是公网的IP

l4ever 发表于 2010-4-8 01:45:11

$data = UDPRecv($soc,"255",2)
msgbox(32,"数据",$data
msgbox(32,"IP",$data
msgbox(32,"端口",$data

sensel 发表于 2010-4-8 04:14:00

帮助文件的示例里就有。; Function to return IP Address from a connected socket.
;----------------------------------------------------------------------
Func SocketToIP($SHOCKET)
    Local $sockaddr, $aRet
   
    $sockaddr = DllStructCreate("short;ushort;uint;char")

    $aRet = DllCall("Ws2_32.dll", "int", "getpeername", "int", $SHOCKET, _
            "ptr", DllStructGetPtr($sockaddr), "int*", DllStructGetSize($sockaddr))
    If Not @error And $aRet = 0 Then
      $aRet = DllCall("Ws2_32.dll", "str", "inet_ntoa", "int", DllStructGetData($sockaddr, 3))
      If Not @error Then $aRet = $aRet
    Else
      $aRet = 0
    EndIf

    $sockaddr = 0

    Return $aRet
EndFunc   ;==>SocketToIP

jyjuse 发表于 2010-4-9 06:00:45

已经解决了谢谢sensel 。不过
    $aRet = DllCall("Ws2_32.dll", "int", "getpeername", "int", $SHOCKET, _

            "ptr", DllStructGetPtr($sockaddr), "int*", DllStructGetSize($sockaddr))
应该是一行而且没有下划线,帮助文件里就是错的。
$aRet = DllCall("Ws2_32.dll", "int", "getpeername", "int", $SHOCKET, "ptr", DllStructGetPtr($sockaddr), "int*", DllStructGetSize($sockaddr))

xiehuahere 发表于 2010-4-9 10:04:19

下划线表示在一个语句中换行,应该可以的啊 ;-)

49666684 发表于 2011-12-20 02:03:21

留下脚印。。代表我曾经来过

menfan1 发表于 2011-12-20 08:54:21

换行连接符哈。。
页: [1]
查看完整版本: 从已经连接的套接字里获得IP[已解决]