WSASend投递大量数据~~

_____non______ 2005-12-28 06:06:26
我写了一个文件传输程序

结构很简单,每次读取一定字节的数据然后发送出去~~

假如说,我定义的buf大小为1024,如果一个文件为1024*10

那么我就需要发送10次,调用10次WSASend进行数据发送~~

如果说我定义一个WSABUF buf[10]的数组,将这个文件全部放入这个buf中

然后将这个buf数组投递出去,是否可行~~

当然,这个例子的数据很小了~~

应该是可以发送成功的,假如这个文件有100M,如果buf大小为1024*4,那么我需要投递上万次,是不是会影响效率~~

如果我每次读取1M的数据,用刚才的方法投递出去,那么就可以较少投递次数~~

但是我刚才写了一个简单的测试程序,发现这样投递数据,接收端好像会接收不完整,发送端已经显示发送出去这么多数据,但是接收端只收到一部分数据~~~

所以来问问,我说的这个方法是否可行~~~

...全文
242 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
_____non______ 2006-01-02
  • 打赏
  • 举报
回复
我知道可以设定,TCP的默认缓冲应该是1024*8吧~~~~~
_____non______ 2005-12-31
  • 打赏
  • 举报
回复
TCP缓冲区大小为1024???????

确定?

我一直认为是1024×8

所以我的数据包大小都设置在了1024×4左右
cryptonym 2005-12-31
  • 打赏
  • 举报
回复
大小是可以设定的。 setsockopt()
gohappy_1999 2005-12-30
  • 打赏
  • 举报
回复
up
cryptonym 2005-12-30
  • 打赏
  • 举报
回复
再底层啊??


那用驱动,或者直接写端口。
dahai_2002 2005-12-30
  • 打赏
  • 举报
回复
1.如果说我定义一个WSABUF buf[10]的数组,将这个文件全部放入这个buf中

然后将这个buf数组投递出去,是否可行~~
-----------------------------------------
这个方法可行, 只不过系统会帮你去做分包而已. 也就是TCP/IP会做IP分片,然后到接收端再重组片. 所以建议每次发送数据包的大小最好不要超过TCP/IP协议所规定的最大包的长度. TCP=1024,UDP=8192,但Internet上UDP=512. 因为一个MAC帧的最大长度就好像是512.

2.应该是可以发送成功的,假如这个文件有100M,如果buf大小为1024*4,那么我需要投递上万次,是不是会影响效率~~
----------------------------------
不会, 反之则会. 因为从上一个问题的答案可以发现, 如果你的应用层省事了,那么TCP/IP层还要帮你做额外的工作. 而且这样做有个不好, 就是你会把发送缓冲区的内容很快填满,甚至导致数据丢失, 或者发送太快接收端程序来不及接收从而导致接收端的接收缓冲区数据丢失.这也是出现你所说的接收端只能接收部分数据的原因.
如果要想发送大量数据,一般写法如下:
#define MAX_LEN 1024
int SendData(BYTE *buffer, int len)
{
BYTE send_buff = buffer;
int send_len = len;
while (send_len > 0)
{
int per_len = send_len;
if (per_len > MAX_LEN)
{
per_len = MAX_LEN;
}
send(socket, send_buff , per_len);
send_buff += per_len;
send_len -= per_len;
}
}

_____non______ 2005-12-30
  • 打赏
  • 举报
回复
up
fengge8ylf 2005-12-30
  • 打赏
  • 举报
回复
UP
_____non______ 2005-12-29
  • 打赏
  • 举报
回复
楼上的楼上说的那两个函数我知道,也用过,的确不错,但是我更想要从底层写
cryptonym 2005-12-28
  • 打赏
  • 举报
回复
我这里没有msdn,给你查不了。
cryptonym 2005-12-28
  • 打赏
  • 举报
回复
这个又专门的函数支持你的这个操作的,

微软又专门对发送文件优化好的函数

觉TRANSLATEFILE 和TRANLATEPACKAGE好像。


第二个是第一个升级版,更nb,支持你的做饭。

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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