本帖最后由 love5173 于 2011-5-4 22:58 编辑
以下是帮助里的一个例子,我在接受数据的时候发现如果是汉字,就只接受到第一个字,如果是数字或者字母就能完整接收,这是为什么啊,看过其他人的例子,是现在客户机转化为二进制后发送的,服务器再把二进制的数据还原字符。跟这个有关系么#include <GUIConstantsEx.au3>
Opt('MustDeclareVars', 1)
;==============================================
;==============================================
;首先启动服务器 !!!!!!!!!!!!!!!
;==============================================
;==============================================
Example()
Func Example()
; 设置一些可再用的信息
; 在这里设置您的公共IP地址 (@IPAddress1).
; Local $szServerPC = @ComputerName
; Local $szIPADDRESS = TCPNameToIP($szServerPC)
Local $szIPADDRESS = @IPAddress1
Local $nPORT = 33891
Local $MainSocket, $GOOEY, $edit, $ConnectedSocket, $szIP_Accepted
Local $msg, $recv
; 启动 TCP 服务
;==============================================
TCPStartup()
; 建立监听套接字 "SOCKET".
; 使用您的IP地址和端口 33891.
;==============================================
$MainSocket = TCPListen($szIPADDRESS, $nPORT)
; 如果套接字创建失败, 则退出.
If $MainSocket = -1 Then Exit
; 创建消息 GUI
;==============================================
$GOOEY = GUICreate("我的服务器 (IP: " & $szIPADDRESS & ")", 300, 200)
$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)
; 如果接受失败, 则断开套接字 "socket"
;----------------------------------------------------------------
If @error Then ExitLoop
; 用我们接收的数据更新编辑控件
;----------------------------------------------------------------
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
|