客户端运行后获取机器名和IP,在接收端clientip.ini自动增加ini配置如何写
接收端$ConnectedSocket=-1
$ConnectedSocket = TCPAccept($MainSocket)
$sRecv = TCPRecv($ConnectedSocket, 2048, 1);256)
If $sRecv <> "" Then ; 接收到客户端发送的数据,开始处理
$sRecv = BinaryToString($sRecv, 4)
IniWrite("clientip.ini",$sRecv,"IP","")
GUICtrlSetData($List1,_NowDate() & ":" & _NowTime() & ': ' &"自动增加客户端配置成功)" & @CRLF)
客户端
$serverip=IniRead("serverip.ini","服务器地址","IP","")
$Socke=-1
$Socket = TCPConnect($serverip, 65431);创建一个套接字(socket)连接到已经存在的服务噿
If $Socket = -1 Then
MsgBox(0, "提示", "服务端未开启请联系管理员!", 0)
exit
EndIf
$sMsg = StringToBinary(@ComputerName, 4);转换字符串为二进制数捿方便与发送数据给服务噿
TCPSend($Socket, $sMsg)
$sMsg1 = StringToBinary("IP="&@IPAddress1, 4);转换字符串为二进制数捿方便与发送数据给服务噿
TCPSend($Socke,$sMsg1)
目的:客户端运行后获取机器名和IP,在接收端clientip.ini自动增加ini配置,格式为
[机器名]
IP=X.X.X.X
请问该怎么写,如果分两次发送接收端写配置弄不来 回复 1# mqqep
幹嘛分兩次送你不會合併成字串一次送 然後接收後再 拆分就好 回复 2# kk_lee69
DllCall("Ws2_32.dll", "int", "getpeername", "int", $SHOCKET, "ptr", DllStructGetPtr($sockaddr), "int*", DllStructGetSize($sockaddr))
论坛找到 函数将从一个连接套接字返回IP地址的方法解决了IP获取问题
另外我是初学,据说字符串拆分要用到正则,我不会,如果不用正则,随便来个拆分的例子关键字我学习吧,谢谢。 2楼是一个方案,另外,帮助文件已经提供了S端获取C端IP的函数,请仔细看帮助说明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 回复 4# fenhanxue
对,现在用的是这个,帮助文档的网络管理里面确实没有看到有提供这个函数的,有可能是我文档版本原因 回复 1# mqqep
你研究看看 下面的這篇資料吧 保證你很有收益
http://www.autoitx.com/forum.php?mod=viewthread&tid=44691&highlight= 接收端可以考虑文件共享,设置ini文件所有人都有权限访问到,IniWrite
写入客户端相关信息进去。
页:
[1]