jycel 发表于 2009-10-15 15:43:18

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

本帖最后由 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

接收端:

#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

bing614 发表于 2009-10-15 19:17:34

$fdata = FileRead($file)
换成
$fdata = FileRead($file,1024 * 1000)

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

jycel 发表于 2009-10-15 20:59:24

谢谢!马上测试下!

jycel 发表于 2009-10-15 20:59:48

谢谢!马上测试下!

jycel 发表于 2009-10-15 21:26:58

测试成功!刚刚试了下发送一个近2G的文件!

remme 发表于 2010-1-19 11:37:24

测试不成功,文件大小没有变化

the886 发表于 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

itljl 发表于 2010-1-19 23:39:50

回复 7# the886

If @error = -1 Then ExitLoop
表示已经到文件尾了!

remme 发表于 2010-1-20 00:26:50

回复 6# remme

对了,测试不成功很可能是当时没有仔细测试。因为后来拿类似的代码测试,发现传输速率是1k/s,因此以为是发送没有成功

qq1244521 发表于 2010-5-20 23:29:44

:face (31): 有点没看懂

smokewu 发表于 2011-3-26 21:44:27

有点没看懂

曼菲士 发表于 2011-3-27 21:06:00

很好的例子,用来两个进程间传送返回数据。

xms77 发表于 2011-9-24 18:07:52

回复 1# jycel
能不能发送可执行文件?

hkc5599 发表于 2012-2-24 10:18:08

thanks!!!!!!!!!!!

82809085 发表于 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
页: [1] 2
查看完整版本: [已解决]局域网TCP传送文件大小是否有限制或参数?