找回密码
 加入
搜索
查看: 11015|回复: 18

[已解决]局域网TCP传送文件大小是否有限制或参数?

 火.. [复制链接]
发表于 2009-10-15 15:43:18 | 显示全部楼层 |阅读模式
本帖最后由 jycel 于 2010-1-17 21:03 编辑

今天用到这功能,测试了下,二台机子,发送117MB的文件可以正常发送,发送127MB却不行,我是试的压缩包,大慨最高限制就在117~127之间吧!
不知道AU3对这方面有所限制还是,待高人指点下
解决方法:2楼
接收端都设置了接受字节,发送端忘了,此代码也是论坛上面的……汗!
发送端:
#Region ;**** 参数创建于 ACNWrapper_GUI ****
#AutoIt3Wrapper_icon=b.ico
#AutoIt3Wrapper_outfile=发送.exe
#AutoIt3Wrapper_Res_Comment=文件传送-发送端
#AutoIt3Wrapper_Res_Description=文件传送程序
#AutoIt3Wrapper_Res_LegalCopyright=BY-Jycel
#EndRegion ;**** 参数创建于 ACNWrapper_GUI ****
#NoTrayIcon
$fileini=@ScriptDir & "\file.ini"
_SendFile()
 
Func _SendFile()
  Local $g_IP = IniRead($fileini,"配置信息","接收地址","")
  ;Local $sendfile = @ScriptDir & "\test.rar"
  Local $sendfile = IniRead($fileini,"配置信息","发送文件","")
  dim $var = 1
 
  ;开始tcp服务
  TCPStartup()
  ;创建一个套接字(socket)连接到已经存在的服务器
  $socket = TCPConnect($g_IP, 62345)
  If $socket = -1 Then
    MsgBox(0, "出错", "连接到服务器出错: " & @error)
    Exit
  EndIf
 
  $file = FileOpen($sendfile, 16)
  ;打开读取文件
  While 1
    $fdata = FileRead($file,1024 * 1000)
    If @error = -1 Then ExitLoop
    TCPSend($socket, $fdata)
        $var += 1
        traytip("msg",$var,5)
  WEnd
  TCPCloseSocket($socket)
  TCPshutdown()
EndFunc ;==>_SendFile
[/au3]
接收端:
[au3]
#Region ;**** 参数创建于 ACNWrapper_GUI ****
#AutoIt3Wrapper_icon=a.ico
#AutoIt3Wrapper_outfile=接收.exe
#AutoIt3Wrapper_Res_Comment=文件传送-接收端
#AutoIt3Wrapper_Res_Description=文件传送程序
#AutoIt3Wrapper_Res_LegalCopyright=BY-Jycel
#EndRegion ;**** 参数创建于 ACNWrapper_GUI ****
#NoTrayIcon
$fileini=@ScriptDir & "\file.ini"
_recvFiles()
 
Func _recvFiles();接收文件
        Local $g_IP = @IPAddress1
        Local $downfile = IniRead($fileini,"配置信息","保存地址","")

        ; 开始 TCP 服务
        TCPStartup()
        ; 创建监听套接字(SOCKET)
        $MainSocket = TCPListen($g_IP, 62345)
        If $MainSocket = -1 Then Exit
 
        $file = FileOpen($downfile, 2 + 8 + 16)
        If $file = -1 Then
                MsgBox(0, "错误", "无法打开目标文件。")
                Exit
        EndIf
        ; 查看客户端连接
        ;--------------------
        Dim $var = 1
 
        While 1
                $ConnectedSocket = TCPAccept($MainSocket)
                If $ConnectedSocket >= 0 Then
                        ;MsgBox(0, "", "我的服务器 - 客户端已经连接")
                        ;打开文件准备接收
                        ;开始接收文件
                                                ToolTip("开始接收文件", @DesktopWidth/2, @DesktopHeight/2,"接收提示",1,2)
                                                Sleep(3000)
                        While 1
                                $sBuff = TCPRecv($ConnectedSocket, 1024 * 1000)
                                If @error Then
                                        FileClose($downfile)
                                        Return $downfile
                                EndIf
                                ;写文件
                                FileWrite($downfile, $sBuff)
                                $var += 1
                                TrayTip("msg", $var, 5)
                        WEnd
 
                EndIf
        WEnd
        ;关闭套接字,停止TCP服务
        TCPCloseSocket($ConnectedSocket)
        TCPShutdown()
EndFunc   ;==>_recvFiles
发表于 2009-10-15 19:17:34 | 显示全部楼层
$fdata = FileRead($file)
换成
$fdata = FileRead($file,1024 * 1000)

TCPRecv 接受多少字节就用FileRead读多少字节

评分

参与人数 1金钱 +9 贡献 +1 收起 理由
lynfr8 + 9 + 1

查看全部评分

 楼主| 发表于 2009-10-15 20:59:24 | 显示全部楼层
谢谢!马上测试下!
 楼主| 发表于 2009-10-15 20:59:48 | 显示全部楼层
谢谢!马上测试下!
 楼主| 发表于 2009-10-15 21:26:58 | 显示全部楼层
测试成功!刚刚试了下发送一个近2G的文件!
发表于 2010-1-19 11:37:24 | 显示全部楼层
测试不成功,文件大小没有变化
发表于 2010-1-19 23:29:58 | 显示全部楼层
发现错误

While 1
    $fdata = FileRead($file,1024 * 1000)
    If @error = -1 Then ExitLoop;这里没有发送最后一次,因在exitloop前在加一个TCPSend
    TCPSend($socket, $fdata)
        $var += 1
        traytip("msg",$var,5)
  WEnd
发表于 2010-1-19 23:39:50 | 显示全部楼层
回复 7# the886

If @error = -1 Then ExitLoop
表示已经到文件尾了!
发表于 2010-1-20 00:26:50 | 显示全部楼层
回复 6# remme

对了,测试不成功很可能是当时没有仔细测试。因为后来拿类似的代码测试,发现传输速率是1k/s,因此以为是发送没有成功
发表于 2010-5-20 23:29:44 | 显示全部楼层
有点没看懂
发表于 2011-3-26 21:44:27 | 显示全部楼层
有点没看懂
发表于 2011-3-27 21:06:00 | 显示全部楼层
很好的例子,用来两个进程间传送返回数据。
发表于 2011-9-24 18:07:52 | 显示全部楼层
回复 1# jycel
能不能发送可执行文件?
发表于 2012-2-24 10:18:08 | 显示全部楼层
thanks!!!!!!!!!!!
发表于 2013-4-4 23:40:34 | 显示全部楼层
_recvFiles()

Func _recvFiles();接收文件
        Local $g_IP = @IPAddress1
        Local $downfile = @ScriptDir & "\test3.rar"

        ; 开始 TCP 服务
        TCPStartup()
        ; 创建监听套接字(SOCKET)
        $MainSocket = TCPListen($g_IP, 65432, 100)
        If $MainSocket = -1 Then Exit
        
        $file = FileOpen($downfile, 2 + 8 + 16)
        If $file = -1 Then
                MsgBox(0, "错误", "无法打开目标文件。")
                Exit
        EndIf
        ; 查看客户端连接
        ;--------------------
        Dim $var = 1
        
        While 1
                $ConnectedSocket = TCPAccept($MainSocket)
                If $ConnectedSocket >= 0 Then
                        ;MsgBox(0, "", "我的服务器 - 客户端已经连接")
                        ;打开文件准备接收
                        ;开始接收文件
                        While 1
                                $sBuff = TCPRecv($ConnectedSocket, 1024 * 1000)
                                If @error Then
                                        FileClose($downfile)
                                        Return $downfile
                                EndIf
                                ;写文件
                                FileWrite($downfile, $sBuff)
                                $var += 1
                                TrayTip("msg", $var, 5)
                        WEnd

                EndIf
        WEnd
        ;关闭套接字,停止TCP服务
        TCPCloseSocket($ConnectedSocket)
        TCPShutdown()
EndFunc   ;==>_recvFiles
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-11-17 04:30 , Processed in 0.085702 second(s), 24 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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