找回密码
 加入
搜索
查看: 3991|回复: 4

[网络通信] udp传输文件,不知道问题出在哪里

[复制链接]
发表于 2015-6-5 17:37:35 | 显示全部楼层 |阅读模式
本帖最后由 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
发表于 2015-6-5 21:35:06 | 显示全部楼层
记录一下,以后学习用
发表于 2015-6-5 21:35:28 | 显示全部楼层
记录一下,以后学习用
发表于 2015-6-8 06:22:53 | 显示全部楼层
学习。。。。。。。。。。。。
发表于 2015-6-8 22:59:55 | 显示全部楼层
我比较好奇的是用UDP来传文件,接到的文件还能用吗?
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-4-29 23:58 , Processed in 0.078007 second(s), 23 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表