接收套接字(socket)連接的數(shù)據(jù).
TCPRecv ( 主套接字, 最大返回量 [, 標(biāo)志] )
主套接字 | 由 TCPAccept or a TCPConnect 函數(shù)返回的套接字標(biāo)識符. |
最大返回量 | max # 最大接收字符數(shù). |
標(biāo)志 | [可選參數(shù)] 設(shè)置為 1, 則強(qiáng)制函數(shù)返回二進(jìn)制數(shù)據(jù). (默認(rèn)為 0, 自行檢測二進(jìn)制/字符串?dāng)?shù)據(jù)). |
成功: | 返回套接字連接發(fā)送的二進(jìn)制/字符串. |
失敗: | 返回 "", 設(shè)置 @error |
@error: | -1 套接字錯誤 |
為 windows API WSAGetError 的返回值 (請查閱 MSDN). |
#include <GUIConstantsEx.au3>
;==============================================
;==============================================
;服務(wù)器!! 首先啟動我 !!!!!!!!!!!!!!!
;==============================================
;==============================================
Example()
Func Example()
;
設(shè)置一些可再用的信息
;
在這里設(shè)置您的公共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
服務(wù)
;==============================================
TCPStartup()
; 建立監(jiān)聽套接字
"SOCKET".
;
使用您的IP地址和端口 33891.
;==============================================
$MainSocket = TCPListen($szIPADDRESS, $nPORT)
; 如果套接字創(chuàng)建失敗,
則退出.
If
$MainSocket =
-1 Then Exit
; 創(chuàng)建消息
GUI
;==============================================
GUICreate("我的服務(wù)器 (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
消息循環(huán)
;==============================================
While
1
$msg = GUIGetMsg()
; GUI 關(guān)閉
;--------------------
If $msg = $GUI_EVENT_CLOSE Then ExitLoop
; 嘗試最多接收 2048 字節(jié)
;----------------------------------------------------------------
$recv = TCPRecv($ConnectedSocket, 2048)
; 如果收到失敗 @error, 則斷開套接字 "socket"
;----------------------------------------------------------------
If @error Then ExitLoop
; 轉(zhuǎn)換 UTF-8 到 AutoIt 原 UTF-16
$recv = BinaryToString($recv, 4)
; 用我們接收的數(shù)據(jù)更新編輯控件
;----------------------------------------------------------------
If $recv <> "" Then GUICtrlSetData($edit,
_
$szIP_Accepted & " > " & $recv & @CRLF & GUICtrlRead($edit))
WEnd
If
$ConnectedSocket <> -1 Then TCPCloseSocket($ConnectedSocket)
TCPShutdown()
EndFunc ;==>Example
; 函數(shù)將從一個連接套接字返回 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) |