从已经连接的套接字里获得IP[已解决]
本帖最后由 jyjuse 于 2010-4-9 05:57 编辑如题,B客户端已经跟A服务端建立连接,在A服务端如何获得B客户端IP. B客户端向A服务端发送自已的IP 我到现在也不明白,2个在不同局域网的机器是怎么连在一起的,不知局域网的路由是如何工作的 我不想用二楼的方法。因为是公网的IP $data = UDPRecv($soc,"255",2)
msgbox(32,"数据",$data
msgbox(32,"IP",$data
msgbox(32,"端口",$data 帮助文件的示例里就有。; 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 已经解决了谢谢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)) 下划线表示在一个语句中换行,应该可以的啊 ;-) 留下脚印。。代表我曾经来过 换行连接符哈。。
页:
[1]