ila 发表于 2015-6-5 17:37:35

udp传输文件,不知道问题出在哪里

本帖最后由 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="filename" Then;接受”发送文件名“的请求
               $listen=UDPOpen($data,65533)
               If @error<>0 Then Exit
               UDPSend($listen,$filename);发送文件名
               EndIf
          EndIf
          Sleep(100)
          $start=UDPRecv($socket,50,2);接受”发送文件“的请求
          If $start<>"" Then
                  If $start="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 @errorThen 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)
$file=FileOpen($runfile,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

wei999 发表于 2015-6-5 21:35:06

记录一下,以后学习用

wei999 发表于 2015-6-5 21:35:28

记录一下,以后学习用

zhaoyun 发表于 2015-6-8 06:22:53

学习。。。。。。。。。。。。

luren666 发表于 2015-6-8 22:59:55

我比较好奇的是用UDP来传文件,接到的文件还能用吗?
页: [1]
查看完整版本: udp传输文件,不知道问题出在哪里