serversocket在阻塞式下接受大文件该怎么做?要求保正文件接收完整,

wangyelon 2003-07-27 01:00:17
如题,请各位指教啊,
若有代码或伪码示例更好,
谢谢
...全文
53 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
zihan 2003-07-30
  • 打赏
  • 举报
回复
to:楼上

可能还是你搞错了大家的意思了,肯定先发文件的长度是最好的.不然你怎么知道文件是否已经发送完成,假如这个文件有100M,你不可能一次发完吧,只有一块一快的发,当然流长度就不是文件长度了

你先发文件长度,如SendText(FileLength)
然后在客户端收到文件长度过后就可以根据现有的大小确定是否已经发送完成了
Atomictry 2003-07-30
  • 打赏
  • 举报
回复
当时我也是遇到这种问题,我提问的时候也说先发文件长度,再发文件内容。但是他们说
不明白我的意思,我晕~~~
你可以用流来接收,这样就可以在接收端可以得到流的长度。当长度是文件长度时就存成
该文件格式。
wangyelon 2003-07-30
  • 打赏
  • 举报
回复
本人级别太低,一帖只有100分,所以结了此另开新贴,欢迎大家继续发言,
新帖地址:
http://expert.csdn.net/Expert/topic/2087/2087798.xml?temp=.0109064
wangyelon 2003-07-30
  • 打赏
  • 举报
回复
大家好,谢谢各位,发送接收的方法我是知道的,
NowCan的那个阻塞的代码我也研究过了,
我的迷惑在于我对于阻塞式SOCKET的运作不是很清楚,
也没找到这样的书籍,我昨天试着先写了一些代码,出了点问题,

如果客户端发出一次信息,又接着再发,但服务器总在不停接收,
我主要是不晓的有什么好办法分清每次发来的到底是什么,
duduwolf 2003-07-29
  • 打赏
  • 举报
回复
楼主看起来挺认真的,从留的通讯地址就能看出来,可惜是个GG不是MM,嗬嗬,开玩笑,其实像你这样的问题并不是一段代码能解决的,我建议你最好去仔细看看socket的通信,把全部弄懂了再找个代码看看,就能很明白了,不然现在得到了代码也看不懂,万一有一点改动就又有问题了,你先去看看《计算机网络编程》然后再找一个比较简单的用阻塞式进行通信的源代码看看。如果用得急得话,去nowcan的网站上看看,我记得那家伙有你要的代码
duduwolf 2003-07-29
  • 打赏
  • 举报
回复
楼主看起来挺认真的,从留的通讯地址就能看出来,可惜是个GG不是MM,嗬嗬,开玩笑,其实像你这样的问题并不是一段代码能解决的,我建议你最好去仔细看看socket的通信,把全部弄懂了再找个代码看看,就能很明白了,不然现在得到了代码也看不懂,万一有一点改动就又有问题了,你先去看看《计算机网络编程》然后再找一个比较简单的用阻塞式进行通信的源代码看看。如果用得急得话,去nowcan的网站上看看,我记得那家伙有你要的代码
smallflaybird 2003-07-29
  • 打赏
  • 举报
回复
我有的..不过我今天下午在培训所以没有在QQ上面发给你.是我昨天写的一个版本不是非常的完善.也是我的一个试验作品.
wangyelon 2003-07-29
  • 打赏
  • 举报
回复
目前我的问题还没有解决,欢迎大家继续给于帮助,
asimpleman 2003-07-28
  • 打赏
  • 举报
回复
gz
wangyelon 2003-07-28
  • 打赏
  • 举报
回复
大家的答案都不是我需要的,其实是这样的,
我写了线程
因为用阻塞式,只能使用 TWinSocketStream 来读写,
所以要发送文件信息,得到回复后再发送文件内容,
就肯定要来来回发送多次,
我去找了帮助文档没头绪,所以才来找大家指点迷津,
wangyelon 2003-07-28
  • 打赏
  • 举报
回复
to funcy333(funcy333 )
啊?真的吗?,
我的水平很勉强,因为我可怜的只能在网络公司做网站,
编写这些东西都是个人爱好,
老大你能给我完整的线程 代码则不胜感激,
将以300分做为感谢,也可面谈吧,我的油箱
yelom125@sina.com
QQ:20131027
手机号: 13055178128
funcy333 2003-07-28
  • 打赏
  • 举报
回复
正巧,我刚做完,关于用socket发送二进制文件的问题就是我发的。你的问题我已经解决了,你需要什么代码?是建立线程的代码还是发送接收的代码 ?
jishiping 2003-07-27
  • 打赏
  • 举报
回复
发送文件时,先发送文件的长度(一个整数表示),再发送文件内容。这样接收时,先读取
长度,然后再读取指定长度的字节数。
cloudxuxi 2003-07-27
  • 打赏
  • 举报
回复
用阻塞模式最好创建一个子线程,在子线程里用Socket发送和接收数据。
我不懂电脑 2003-07-27
  • 打赏
  • 举报
回复
看看bcb帮助吧,里面有一个例子。‘
asimpleman 2003-07-27
  • 打赏
  • 举报
回复
gz
铖邑 2003-07-27
  • 打赏
  • 举报
回复
为什么要来回传递信息?
你怕阻塞在读操作上,可以先去缓冲区字节数,再读,就不会阻塞了。
int len;
ioctlsocket(s, FIONREAD, &len, sizeof(int));
wangyelon 2003-07-27
  • 打赏
  • 举报
回复
我也明白需要发送文件信息,但是我使用的是阻塞式,
我不知道如何接收多次,并来回传递信息,
铖邑 2003-07-27
  • 打赏
  • 举报
回复
先给服务器发送文件信息:文件名、大小等
再将文件按某一长度,如1024字节,全部发送
当服务器收到期望的字节,就可以关闭文件了。

1,317

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 网络及通讯开发
社区管理员
  • 网络及通讯开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧