关于在Internet上用Socket连接时接收数据的一个问题!!!

dyfh 2000-08-23 07:12:00
我在Internet上的两台机器用两个Socket程序连接,从一台机子向另一台发数据,我是
每次发1K,并在接收端以最后一次小于1K为结束标志,可是在却因为并不能保证每次都能
成功发送1K而不断出错,请问各位前辈高人,有什么办法可以让接收端获知文件传送已结
束???
如果有几个文件同时发送,又如何让接收端Socket区分??
...全文
155 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
Kevin_qing 2000-08-29
  • 打赏
  • 举报
回复
发送端先告訴接收端有多少字节要发,然后就可以进入发送/接收的循环了。
在这里每次发送/接收的大小都无所谓,windows并不一定是在你send()以后立刻发送,
详细的见windsock2的文档。

C语言实例:只写了发送端的,接收端类似
send side:
....connected
int length;//length of file
char *buffer;//contain buffer of file ,size length
unsigned int nSent=0;
int nSend;
int szSend;
while(nSent<length){
szSend=length-nSend>1024? 1024:length-nSend;
nSend=send(sock,buffer,szSend,0);
if(nSend<0){
//error code here;
}
buffer+=nSend;
nSent+=nSend;
}
cyhan 2000-08-29
  • 打赏
  • 举报
回复
用stream方式传送.
IAmKylix 2000-08-23
  • 打赏
  • 举报
回复
需要你自己的简单的协议。
Sunlet 2000-08-23
  • 打赏
  • 举报
回复
在vc中,通过CAsyncSocket派生,每次发送数据量较少,发送端和接收端send和receive的长度参数设置成相等。可以实现每次传送数据的完整性。

5,379

社区成员

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

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