要实现这个不难,不过用UDP协议来传送文件,很容易掉包,如果不是群发,最好用TCP
下面给你写个UDP发送图片和接收的例子:
先运行服务端,再运行发送端
服务端:
UDPStartup()
$socket = UDPBind("127.0.0.1", 12345)
If @error <> 0 Then Exit
$file = FileOpen ("2.jpg",18)
$i=0
While 1
$data = UDPRecv($socket, 1024 * 1000, 1)
If $data <> "" Then
$data2 = BinaryToString($data, 4);增加:将二进制数据转换成字符
If $data2 = "done" Then
FileClose ($file)
ShellExecute("2.jpg")
Exit
EndIf
FileWrite($file, $data)
$i+=1
ToolTip("接收到第"&$i&"个包",200,300)
EndIf
WEnd
发送端:
UDPStartup()
$socket = UDPOpen("127.0.0.1", 12345)
$file = FileOpen ("1.jpg",16)
$i=0
While 1
$data = FileRead ($file,512)
If @error == -1 Then
UDPSend($socket,StringToBinary ("done",4))
FileClose ($file)
ExitLoop
EndIf
UDPSend($socket,$data)
$i+=1
ToolTip ("发送第"&$i&"个包" ,100,300)
Sleep (2)
WEnd
UDPCloseSocket($socket)
UDPShutdown()
接收完毕后,会打开2.jpg文件,一般来说,本地测试问题不大,如果是网络测试,掉包的可能性大增,就不一定能接收到全部的包了。 谢谢C.L 测试下! 回复 17# C.L
C.L大师请问能否将你写的这个UDP图片传送服务端及发送端改写一个TCP传送方式的啊,谢谢啦, 回复 18# txm888
给你写个TCP的例子,先运行服务端,再运行发送端
服务端:
TCPStartup()
$socket = TCPListen("127.0.0.1", 12345)
If @error <> 0 Then Exit
$file = FileOpen ("2.jpg",18)
$data2 = ""
$i = 0
While 1
$ConnectedSocket = TCPAccept($Socket)
If $ConnectedSocket == -1 Then ContinueLoop
While 1
$data = TCPRecv($ConnectedSocket, 1024, 1)
If @error Then $data = "done"
If $data <> "" Then
If BinaryLen ($data) < 50 Then $data2 = BinaryToString($data, 4)
If $data2 = "done" Then
FileClose ($file)
ShellExecute("2.jpg")
Exit
EndIf
FileWrite($file, $data)
$i+=1
ToolTip("接收到第"&$i&"个包",200,500)
EndIf
WEnd
WEnd
TCPCloseSocket($socket)
TCPshutdown()
发送端:
TCPStartup()
$socket = TCPConnect("127.0.0.1", 12345)
If $socket = -1 Then
MsgBox(0, "出错", "连接到服务器出错,请先运行服务端软件")
Exit
EndIf
$file = FileOpen ("1.jpg",16)
$i=0
While 1
$data = FileRead ($file,1024)
If @error == -1 Then
TCPSend($socket,StringToBinary ("done",4))
FileClose ($file)
Exit
EndIf
TCPSend($socket, $data)
$i += 1
ToolTip ($i,100,200)
WEnd
TCPCloseSocket($socket)
TCPshutdown()
呵呵学习一下,最好还是TCP,稳定安全 回复txm888
给你写个TCP的例子,先运行服务端,再运行发送端
服务端:发送端:
C.L 发表于 2010-8-12 02:55 http://www.autoitx.com/images/common/back.gif
C.L大哥发送的图片和接受的图片名字要一样可以做到吗
比如 发送 123.jpg
接收的时候也 123.jpg 回复 21# 261869247
发送的图片和接受的图片名字要一样可以做到吗
比如 发送 123.jpg
接收的时候也 123.jpg
可以的,不过这里有两种方式,我不知道你想说的是那种方式:
1、服务端已经知道发送端发过来的名字,属于预先协定好的文件命名,比如上面的例子,这种方式,就是在服务端里用名字”1.jpg”接收就可以了
2、 服务端不知道发送端将发送什么文件名的文件,而是按发送端发过来的信息确定接收到的文件来命名文件名,这种方式就比较复杂一些,但也是可以实现的。我以前因自已需要也写过类似的代码,但没有保存到,用完就删除掉了,你可以自已先试着写些代码来测试,应该不难。 是第2种服务端要接受来自不同IP的图片 保存到服务器 这些图片都是发送图片的IP命名的
我来试试 嘿嘿 收藏了~~~~~~~~~~~~ 好难啊看不懂啊 真是好东西阿!{:face (361):} 刚刚试过了,接收不成功,0KB
看代码应该是可以的,觉得是缺少了一个同步的操作。 大哥能不能弄个在指定的文件夹里自动检测到有相片更新就发送,在服务端右下角最好有个小方框提示。
页:
1
[2]