找回密码
 加入
搜索
查看: 3109|回复: 9

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

  [复制链接]
发表于 2010-4-7 06:40:29 | 显示全部楼层 |阅读模式
本帖最后由 jyjuse 于 2010-4-9 05:57 编辑

如题,B客户端已经跟A服务端建立连接,在A服务端如何获得B客户端IP.
发表于 2010-4-7 08:09:22 | 显示全部楼层
B客户端向A服务端发送自已的IP
发表于 2010-4-7 09:07:52 | 显示全部楼层
我到现在也不明白,2个在不同局域网的机器是怎么连在一起的,不知局域网的路由是如何工作的
 楼主| 发表于 2010-4-7 12:22:08 | 显示全部楼层
我不想用二楼的方法。因为是公网的IP
发表于 2010-4-8 01:45:11 | 显示全部楼层
$data = UDPRecv($soc,"255",2)
msgbox(32,"数据",$data[0]
msgbox(32,"IP",$data[1]
msgbox(32,"端口",$data[2]
发表于 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[8]")

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

    $sockaddr = 0

    Return $aRet
EndFunc   ;==>SocketToIP

评分

参与人数 1威望 +2 收起 理由
afan + 2

查看全部评分

 楼主| 发表于 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))
发表于 2010-4-9 10:04:19 | 显示全部楼层
下划线表示在一个语句中换行,应该可以的啊 ;-)
发表于 2011-12-20 02:03:21 | 显示全部楼层
留下脚印。。代表我曾经来过
发表于 2011-12-20 08:54:21 | 显示全部楼层
换行连接符哈。。
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-6-14 01:39 , Processed in 0.092065 second(s), 28 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表