|
本帖最后由 ila 于 2015-6-5 20:22 编辑
代码目标:
服务器开启,监视请求。
客户端请求获取文件名,
服务端收到请求,发送文件名。
服务端收到文件名,请求开始传输文件。
服务端收到“请求传输文件”,
开始二进制传输文件。
客户端打开文件,收取文件,完毕关闭文件。
服务端关闭,继续监视。
请问socket可以连续使用吗?
不知道代码哪里错误了,服务端运行失败,请帮忙指出。
===========================
服务端代码:#Region ;**** 参数创建于 ACNWrapper_GUI ****
#PRE_UseX64=n
#EndRegion ;**** 参数创建于 ACNWrapper_GUI ****
Dim $open1,$socket=-1,$filename="nimeia.exe",$data,$start, $file, $fdata
UDPStartup(); 开始 UDP 服务
OnAutoItExitRegister("Cleanup"); 注册清理函数.
If $socket <> -1 Then UDPCloseSocket($socket)
TCPShutdown()
UDPShutdown()
$socket = UDPBind(@IPAddress1,65532); 绑定到一个套接字(SOCKET)
If @error <> 0 Then
MsgBox(0,0,@error)
Exit
EndIf
While 1;循环监视
Local $data = UDPRecv($socket,50,2);接受”发送文件名“的请求
If $data <> "" Then
If $data[0]="filename" Then ;接受”发送文件名“的请求
$listen=UDPOpen($data[1],65533)
If @error<>0 Then Exit
UDPSend($listen,$filename);发送文件名
EndIf
EndIf
Sleep(100)
$start=UDPRecv($socket,50,2);接受”发送文件“的请求
If $start<>"" Then
If $start[0]="start" Then
$file=FileOpen($filename,16)
While 1
$fdata = FileRead($file, 1024 * 1000)
If @error = -1 Then
udpCloseSocket($socket)
FileClose($file)
ExitLoop 2
Else
udpSend($listen, $fdata)
EndIf
WEnd
EndIf
EndIf
WEnd
Func Cleanup();清理函数
UDPCloseSocket($socket)
UDPShutdown()
EndFunc ;==>Cleanup
#Region ;**** 参数创建于 ACNWrapper_GUI ****
#PRE_UseX64=n
#EndRegion ;**** 参数创建于 ACNWrapper_GUI ****
dim $socket,$listen,$status1,$runfile,$file,$status2,$sBuff
UDPStartup(); 开始 UDP 服务
OnAutoItExitRegister("Cleanup"); 注册清理函数.
$socket =UDPBind(@IPAddress1,65533); 打开一个"套接字"("SOCKET")
MsgBox(0,0,@error)
If @error Then Exit
$listen = UDPOpen("192.168.3.145",65532)
$status1= UDPSend($listen, "filename");请求获取文件名
If $status1 = 0 Then
MsgBox(0, "错误", "当发送 UDP 消息时发生错误: " & @error)
Exit
EndIf
$runfile=UDPRecv($socket,50,2);确认请求
MsgBox(0,0,$runfile[0])
$file=FileOpen($runfile[0],25)
$status2=UDPSend($listen,"start");要求发送文件
If @error Then
MsgBox(0, "错误", "当发送 UDP 消息时发生错误: " & @error)
Exit
EndIf
While 1
$sBuff = UDPRecv($socket, 1024 * 1000)
If @error Then
FileClose($file)
UDPCloseSocket($socket)
UDPShutdown()
ExitLoop
EndIf
FileWrite($file, $sBuff)
WEnd
;
Func Cleanup()
UDPCloseSocket($socket)
UDPShutdown()
EndFunc ;==>Cleanup
|
|