關(guān)閉 TCP 套接字(socket).
TCPCloseSocket ( 套接字 )
套接字 | 由 TCPListen 或 TCPAccept 函數(shù)返回的套接字標(biāo)識(shí)(SocketID). |
成功: | 返回 1. |
失敗: | 返回 0, 設(shè)置 @error |
@error: | 為 windows API WSAGetError 的返回值 (請(qǐng)查閱 MSDN). |
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <ButtonConstants.au3>
;==============================================
;==============================================
;服務(wù)器!! 首先啟動(dòng) !!!!!!!!!!!!!!!
;==============================================
;==============================================
; 初始化代表連接的變量
;==============================================
Global $ConnectedSocket = -1
Global $MainSocket
Example()
Func Example()
OnAutoItExitRegister("Cleanup")
Local
$g_IP, $RogueSocket, $GOOEY, $edit, $input, $butt, $msg
Local
$ret, $recv
$g_IP
= "127.0.0.1"
; 啟動(dòng) TCP
服務(wù)
;==============================================
TCPStartup()
; 創(chuàng)建監(jiān)聽
"SOCKET"
;==============================================
$MainSocket = TCPListen($g_IP, 65432, 100)
If
$MainSocket =
-1 Then Exit
$RogueSocket = -1
; 創(chuàng)建聊天 GUI
對(duì)話框
;==============================================
$GOOEY = GUICreate("我的服務(wù)端", 300, 200)
$edit
= GUICtrlCreateEdit("", 10, 40, 280, 150, $WS_DISABLED)
$input = GUICtrlCreateInput("", 10, 10, 200, 20)
$butt
= GUICtrlCreateButton("發(fā)送",
210, 10, 80, 20, $BS_DEFPUSHBUTTON)
GUISetState()
; GUI
消息循環(huán)
;==============================================
While
1
$msg = GUIGetMsg()
; GUI 關(guān)閉
;--------------------
If $msg = $GUI_EVENT_CLOSE Then ExitLoop
; 用戶點(diǎn)擊發(fā)送
;--------------------
If $msg = $butt Then
If $ConnectedSocket
> -1 Then
$ret = TCPSend($ConnectedSocket, GUICtrlRead($input))
If @error Or $ret < 0 Then
; 發(fā)生錯(cuò)誤時(shí), 關(guān)閉套接字并復(fù)位
ConnectedSocket 為 -1
;----------------------------------------------------------------
TCPCloseSocket($ConnectedSocket)
WinSetTitle($GOOEY, "", "我的服務(wù)器 -
用戶端切斷連接")
$ConnectedSocket = -1
ElseIf $ret > 0 Then
;
用我們發(fā)送的數(shù)據(jù)更新編輯控件
;----------------------------------------------------------------
GUICtrlSetData($edit, GUICtrlRead($edit) & GUICtrlRead($input) & @CRLF)
EndIf
EndIf
GUICtrlSetData($input, "")
EndIf
If $RogueSocket > 0 Then
$recv =
TCPRecv($RogueSocket, 512)
If Not @error Then
TCPCloseSocket($RogueSocket)
$RogueSocket = -1
EndIf
EndIf
; 如果沒有連接則尋找一個(gè)
;--------------------
If $ConnectedSocket
= -1 Then
$ConnectedSocket =
TCPAccept($MainSocket)
If $ConnectedSocket
< 0 Then
$ConnectedSocket = -1
Else
WinSetTitle($GOOEY, "",
"我的服務(wù)器 - 用戶端連接")
EndIf
; 如果連接,則嘗試讀一些數(shù)據(jù)
;--------------------
Else
; 運(yùn)行一個(gè)無條件的接收,避免另外的用戶端嘗試連接
;----------------------------------------------------------------
$RogueSocket =
TCPAccept($MainSocket)
If $RogueSocket
> 0 Then
TCPSend($RogueSocket, "~~rejected")
EndIf
$recv =
TCPRecv($ConnectedSocket, 512)
If $recv
<> ""
And $recv
<> "~~bye"
Then
; 用我們接收到的數(shù)據(jù)更新編輯控件
;----------------------------------------------------------------
GUICtrlSetData($edit,
GUICtrlRead($edit)
& ">"
& $recv
& @CRLF)
ElseIf @error
Or $recv
= "~~bye"
Then
; 發(fā)生錯(cuò)誤時(shí), 關(guān)閉套接字并復(fù)位 ConnectedSocket 為
-1
;----------------------------------------------------------------
WinSetTitle($GOOEY, "",
"我的服務(wù)器 - 用戶端切斷連接")
TCPCloseSocket($ConnectedSocket)
$ConnectedSocket = -1
EndIf
EndIf
WEnd
GUIDelete($GOOEY)
EndFunc ;==>Example
Func Cleanup()
;腳本退出時(shí)關(guān)閉打開的套接字以及 TCP 服務(wù)
;----------------------------------------------------------------------
If
$ConnectedSocket > -1
Then
TCPSend($ConnectedSocket, "~~bye")
Sleep(2000)
TCPRecv($ConnectedSocket, 512)
TCPCloseSocket($ConnectedSocket)
EndIf
TCPCloseSocket($MainSocket)
TCPShutdown()
EndFunc ;==>Cleanup
provider with jb51.net (unicode) |