serversocket和clientsocket SendBuf的问题

meikeer 2007-04-19 01:10:59
typedef struct TFileData//发布包的长度
{
CHAR command[30];
CHAR password[20];
CHAR info[255];
int position;//当前传输的次数
short length;//当前传输的长度
int width;//文件的实际长度
CHAR filedata[4096];//文件包
}TFileData;
ServerSocket1->Socket->Connections[0]->SendBuf(&dp, sizeof(dp));

这个结构是4416个字节

int tsize = Socket->ReceiveLength();
为什么接收后就只有4320个字节?
这样filedata[4096]会丢失96个字节,这是什么原因?
...全文
351 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
meikeer 2007-04-21
  • 打赏
  • 举报
回复
自己顶一下,有什么好的办法能避免这样的事吗?
meikeer 2007-04-19
  • 打赏
  • 举报
回复
先感谢do2008(aiGooo·闲来吹吹牛,不亦乐乎)的热心解答,4320是一个稳定值,在单机和网络上测试每次都只收到这些....

用这个代码时发送数据的时候,局域网内传送200M的文件用了8分25秒,而放在WEB服务器上下载,只用了不到一分钟,为什么我的程序会用了这么长的时间??
谢谢!
do2008 2007-04-19
  • 打赏
  • 举报
回复
上面有打错字,,修正一下

一般来说,应用层通过socket发送数据,
socket会根据发送缓冲区中数据的大小分成几分来发送,
每次发送的大小,会跟具体的网络环境如网速等有关,
最高一个TCP数据包不会超过64KB
而在有些网络应用中,可能每次只发送一两K数据,甚至几百字节或更少

数据的收发,在网络应用中,也是涉及系统效率的重要地方,嘿嘿,多多体会
do2008 2007-04-19
  • 打赏
  • 举报
回复
一般来说,应用层通过socket发送数据, socket会发送缓冲区中数据的大小分成几来分来发送,
每次发送的大小,会跟具体的网络环境如网速等待有关,最高一个TCP数据包不会超过64KB
而在有些网络应用层,有可能每次发送一两K数据,甚至几百字节甚至更少,

根据这情况,调用一次ReceiveLength(),可能只返回4320,再调用一次ReceiveLength(),便可接收剩下的96

一般来说,在socket中接收,使用
waitfordata() 这个方法来等待数据,比较好的一种处理方式

具体看一下,这个waitfordata成员函数的在线帮助吧

1,317

社区成员

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

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