Delphi中用Winsocket进行传输时怎样解决文件过长的问题

hope_self 2000-03-23 03:37:00
我在广域网用Winsocket做通讯时,由于IP打包限制所以最多只能传输1K字节的东西但有时需要传送大于1K字节的文件,我发现在DELPHI的SOCKET封装了SENDSTREAM函数为什么没有接收的函数?请教!如果有解决办法请与我联系

e_mail:mz0873@sina.com
电话:029-2668032
...全文
212 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
sunhuiNO1 2001-08-14
  • 打赏
  • 举报
回复
呵呵,有接受函数啊,
Len:=Socket.ReceiveLength;
Temp:=Socket.ReceiveText;
filem.Write(PChar(Temp)^,len);
FILEM为文件流,
这样接受,我在INTERNET上用阻塞模式,发4M左右得文件都没有问题
要具体得代码,QQ联系,15056091
Kyky_onyourway 2001-08-14
  • 打赏
  • 举报
回复
请教 sunsetyang() :
按你的意思,用 sendbuf 方法来传输文件的话,是不是不用理文件的长度?因为“你只要交给tcp那么多的数据,它肯定会帮你全部传输的。不用你去关心她是怎么打包发送的,”对不对?
Kyky_onyourway 2001-08-12
  • 打赏
  • 举报
回复
“在DELPHI的SOCKET封装了SENDSTREAM函数为什么没有接收的函数?请教!”
这个问题呢?能解释一下吗?
sadpacific 2000-03-23
  • 打赏
  • 举报
回复
来晚了。
sadpacific 2000-03-23
  • 打赏
  • 举报
回复
同意sunsetyang.
sunsetyang 2000-03-23
  • 打赏
  • 举报
回复
在发送文件的信息之前,最好先发送文件的长度。接受方得到数据后先展开文件长度,然后的操作就只需要做个循环,读取一定长度的缓冲区后写入文件就可以了。TCP协议对包的大小没有限制的,有限制的是ip,但那属于底层协议所管的。你只要交给tcp那么多的数据,它肯定会帮你全部传输的。不用你去关心她是怎么打包发送的,除非你使用UDP.使用Sendstream时需要注意stream不要你自己去显式删除,由于tcp的发送使用异步方式,因此你不能认为该函数返回就已经是整个数据都发送过去了。sendstream会负责适当的清楚工作的,很可能不是由它完成的,而是由进程关闭时而作的清场工作。

5,386

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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