[已解决]局域网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
$fdata = FileRead($file)
换成
$fdata = FileRead($file,1024 * 1000)
TCPRecv 接受多少字节就用FileRead读多少字节 谢谢!马上测试下! 谢谢!马上测试下! 测试成功!刚刚试了下发送一个近2G的文件! 测试不成功,文件大小没有变化 发现错误
While 1
$fdata = FileRead($file,1024 * 1000)
If @error = -1 Then ExitLoop;这里没有发送最后一次,因在exitloop前在加一个TCPSend
TCPSend($socket, $fdata)
$var += 1
traytip("msg",$var,5)
WEnd 回复 7# the886
If @error = -1 Then ExitLoop
表示已经到文件尾了! 回复 6# remme
对了,测试不成功很可能是当时没有仔细测试。因为后来拿类似的代码测试,发现传输速率是1k/s,因此以为是发送没有成功 :face (31): 有点没看懂 有点没看懂 很好的例子,用来两个进程间传送返回数据。 回复 1# jycel
能不能发送可执行文件? thanks!!!!!!!!!!! _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