Код:

#include <GUIConstantsEx.au3>
Opt('MustDeclareVars', 1)
Example()
Func Example()
Local $szIPLocal = @IPAddress1
Local $szIPRemote = @IPAddress1
Local $LocalPort = 33892
Local $RemotePort = 33891
Local $MainSocket, $GOOEY, $InputSocket=-1, $OutputSocket=-1, $szIP_Accepted
Local $Bttn1, $Bttn2, $Edit1, $Edit2
Local $msg, $recv, $szData
TCPStartup()
$MainSocket = TCPListen($szIPLocal, $LocalPort)
If $MainSocket = -1 Then Exit
$GOOEY = GUICreate("My Server (IP: " & $szIPLocal & ")", 300, 250)
$Edit1 = GUICtrlCreateEdit("", 10, 10, 280, 180)
$Edit2 = GUICtrlCreateEdit("", 10, 190, 280, 20, 0)
$Bttn1 = GUICtrlCreateButton("Connect!", 10, 217, 120)
$Bttn2 = GUICtrlCreateButton("Send Text", 170, 217, 120)
GUISetState()
While 1
$msg = GUIGetMsg()
If $msg = $GUI_EVENT_CLOSE Then ExitLoop
If $msg = $Bttn1 Then
If GUICtrlRead($Bttn1)="Connect!" Then
$OutputSocket = TCPConnect($szIPRemote, $RemotePort)
If @error Then
MsgBox(4112, "Error", "TCPConnect failed with WSA error: " & @error)
Else
GUICtrlSetData($Bttn1, "Disconnect!")
EndIf
Else
If $OutputSocket<> -1 Then TCPCloseSocket($OutputSocket)
$OutputSocket=-1
GUICtrlSetData($Bttn1, "Connect!")
EndIf
EndIf
If $msg = $Bttn2 Then
$szData = GUICtrlRead($Edit2)
If $OutputSocket<>-1 And $szData<>"" Then
TCPSend($OutputSocket, $szData)
GUICtrlSetData($Edit1, $szIPLocal &" > "& $szData & @CRLF & GUICtrlRead($Edit1))
EndIf
EndIf
$recv = TCPRecv($InputSocket, 2048)
If @error Then
$InputSocket = TCPAccept($MainSocket)
If $InputSocket <> -1 Then $szIP_Accepted = SocketToIP($InputSocket)
Else
If $recv<>"" Then GUICtrlSetData($Edit1, $szIP_Accepted &" > "& $recv & @CRLF & GUICtrlRead($Edit1))
EndIf
WEnd
If $InputSocket <> -1 Then TCPCloseSocket($InputSocket)
If $OutputSocket<> -1 Then TCPCloseSocket($InputSocket)
TCPShutdown()
EndFunc ;==>Example
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