接收套接字(socket)连接的数据.
TCPRecv ( 主套接字, 最大返回量 [, 标志] )
主套接字 | 由 TCPAccept or a TCPConnect 函数返回的套接字标识符. |
最大返回量 | max # 最大接收字符数. |
标志 | [可选参数] 设置为 1, 则强制函数返回二进制数据. (默认为 0, 自行检测二进制/字符串数据). |
成功: | 返回套接字连接发送的二进制/字符串. |
失败: | 返回 "", 设置 @error |
@error: | -1 套接字错误 |
为 windows API WSAGetError 的返回值 (请查阅 MSDN). |
#include <GUIConstantsEx.au3>
;==============================================
;==============================================
;服务器!! 首先启动我 !!!!!!!!!!!!!!!
;==============================================
;==============================================
Example()
Func Example()
;
设置一些可再用的信息
;
在这里设置您的公共IP地址 (@IPAddress1).
;
Local $szServerPC = @ComputerName
;
Local $szIPADDRESS = TCPNameToIP($szServerPC)
Local
$szIPADDRESS =
@IPAddress1
Local
$nPORT =
33891
Local
$MainSocket,
$edit, $ConnectedSocket, $szIP_Accepted
Local
$msg, $recv
; 启动 TCP
服务
;==============================================
TCPStartup()
; 建立监听套接字
"SOCKET".
;
使用您的IP地址和端口 33891.
;==============================================
$MainSocket = TCPListen($szIPADDRESS, $nPORT)
; 如果套接字创建失败,
则退出.
If
$MainSocket =
-1 Then Exit
; 创建消息
GUI
;==============================================
GUICreate("我的服务器 (IP: " &
$szIPADDRESS &
")", 300, 200, 100, 100)
$edit
= GUICtrlCreateEdit("", 10, 10, 280, 180)
GUISetState()
;
初始化代表连接的变量
;==============================================
$ConnectedSocket = -1
;等待和接受连接
;==============================================
Do
$ConnectedSocket = TCPAccept($MainSocket)
Until
$ConnectedSocket <> -1
; 获取已连接用户端接的
IP
$szIP_Accepted = SocketToIP($ConnectedSocket)
; GUI
消息循环
;==============================================
While
1
$msg = GUIGetMsg()
; GUI 关闭
;--------------------
If $msg = $GUI_EVENT_CLOSE Then ExitLoop
; 尝试最多接收 2048 字节
;----------------------------------------------------------------
$recv = TCPRecv($ConnectedSocket, 2048)
; 如果收到失败 @error, 则断开套接字 "socket"
;----------------------------------------------------------------
If @error Then ExitLoop
; 转换 UTF-8 到 AutoIt 原 UTF-16
$recv = BinaryToString($recv, 4)
; 用我们接收的数据更新编辑控件
;----------------------------------------------------------------
If $recv <> "" Then GUICtrlSetData($edit,
_
$szIP_Accepted & " > " & $recv & @CRLF & GUICtrlRead($edit))
WEnd
If
$ConnectedSocket <> -1 Then TCPCloseSocket($ConnectedSocket)
TCPShutdown()
EndFunc ;==>Example
; 函数将从一个连接套接字返回 IP 地址.
;----------------------------------------------------------------------
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
provider with jb51.net (unicode) |