Winsock傳送文件,不知道文件是否傳送完成?

cainiaobus 2004-12-22 05:35:17
用Winsock傳送一個大文件,在傳送完成后,我想結束這個連線,包括Server端和Client端
現在的問題是:我不知道傳送完成了?
比如:從Server端傳送一個文件到客戶端,傳送完成后,Server,因為有SendComplete, 但客戶端並不知道文件傳送完成了,那該怎麼辦?
...全文
110 点赞 收藏 9
写回复
9 条回复
cainiaobus 2004年12月23日
謝謝helanshan(C++)
已解決了
回复 点赞
helanshan 2004年12月23日
从你说的情况看,可能最后一个正文数据包缓冲区未满,发送的消息添加到缓冲区一块发送的..
那你就根据客户端来判断吧..服务器端先把文件大小传送到客户端..
回复 点赞
cainiaobus 2004年12月23日
TO:helanshan(C++)
客戶端接收不到OVER數據,因為OVER跟著正文數據包的末尾傳送出去了(好奇怪!),
我的代碼如下:

服務器端:發送完文件后,接著發了一個消息
tcpServer.SendData "over"

客戶端:
bytearr()为接收数据数组
dim intnum as inteder
dim strnum as string
for intnum=3 to 0 step -1
strnum=strnum+chr(bytearr(bytesTotal-intnum)) '从数组中提取4个字节数据,并转换为字符
next
if strnum="over" then '如果消息是over
.........'关闭文件代码 '文件传输结束,关闭文件
exit sub
else
..........'继续接收代码
end if

上面這樣可以接收到OVER(在最后一個包中),但這個包同時含有文件的正文數據,
得把前面bytearr( 0 to bytesTotal-4)存到文件中

不知道這是為什麼?
如果有人答對此問題,加50分結貼,
如果沒有,那我就今天結貼了

回复 点赞
helanshan 2004年12月22日
我要傳送的文件是二進制文件,如果要從服務器端發消息通知客戶端,在客戶端接收信息后,
不知道怎樣區分哪個是控制消息,那個是要傳送過來的二進制文件
**************************************************************************
服务器端在发送完文件后,发送一个消息:
Me.Winsock1.SendData "over"
客户端:
bytearr()为接收数据数组
dim intnum as inteder
dim strnum as string
for intnum=0 to 3
strnum=strnum+chr(bytearr(intnum)) '从数组中提取4个字节数据,并转换为字符
next
if strnum="over" then '如果消息是over
.........'关闭文件代码 '文件传输结束,关闭文件
exit sub
else
..........'继续发送代码
end if
回复 点赞
zyg0 2004年12月22日
在2进制文件加个头就能标石了不是吗?
回复 点赞
helanshan 2004年12月22日
1、由客户端判断:
前提是服务器在发送文件前,先发送一个文件大小的数据包,客户端根据文件大小判断是否发送完毕。
2、由服务器端判断:
如果发送完成,发送一个特定的通知消息,客户端根据消息确认文件发送完成。
3、简单点的:
服务器发送完文件后,关闭连接,客户端根据winsock1.state状态判断是否发送完成。
回复 点赞
cainiaobus 2004年12月22日
TO:pcwak tztz520
我要傳送的文件是二進制文件,如果要從服務器端發消息通知客戶端,在客戶端接收信息后,
不知道怎樣區分哪個是控制消息,那個是要傳送過來的二進制文件

有沒有範例給我一份,就是客戶端接收時,區分控制消息與要傳輸入的文件正文
回复 点赞
tztz520 2004年12月22日
发送前应该首先发一个包过去,就是标明这人文件的大小,客户端根据这个来判断文件是否传送完毕,如果传送完成后就发回来一个包,告诉服务器说完成了.
回复 点赞
pcwak 2004年12月22日
SendComplete事件
发消息通知客户端
回复 点赞
发动态
发帖子
网络编程
创建于2007-09-28

1145

社区成员

1.8w+

社区内容

VB 网络编程
社区公告
暂无公告