问3个socket的简单问题,呵呵送分。

JavaNet的牛肉粉丝 2009-04-11 08:53:30
1.客户端有一个1G的文件发送给服务器,那我开的缓存区是10KB,这个缓存够不够啊,能不能再大点啊。
2.因为是1G的文件,每次10KB,那要发好多次数据包,我想问客户端是不是要等服务器收到数据包,在发送通知告诉客户端继续发呢?还是客户端一次性while发完不管服务器收没收到。
3.我这个WSAAsyncSelect模式,send是阻塞还是非阻塞啊?明白了的话我应该会知道第2问了呵呵。
...全文
115 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
hiboys 2009-04-11
  • 打赏
  • 举报
回复
1看服务器性能设置缓冲。
2.对底层api没把握就用语言的封装库来做。不一定比自己的效率差。发1g的文件,你不会是做嵌入开发吧?
xumaojun 2009-04-11
  • 打赏
  • 举报
回复
主要是看你用什么方式通信,Tcp,Udp,其中tcp会保证数据传到服务器,udp就不能保证了
ylywyn136 2009-04-11
  • 打赏
  • 举报
回复
1.10KB的缓存也算可以,不过也可以再大一点,多试试
2.因为是1G的文件,每次10KB,那要发好多次数据包,我想问客户端是不是要等服务器收到数据包,在发送通知告诉客户端继续发呢?还是客户端一次性while发完不管服务器收没收到。
一般TCP的话,连接自动控制的,发送时检查已发字节数保证发送完,接收时保证接收完就行了。所以应该不用自己来确认接收通知
3.非阻塞
morris88 2009-04-11
  • 打赏
  • 举报
回复
1. 一般说来,这个1G的文件你会写到硬盘的吧。所以10KB的缓存也算可以,不过也可以再大一点
2. 一般客户端直接while完吧,由tcp协议来保证可靠性
3. 如果没有特殊设置,那个send就是阻塞方式的。
glacier3d 2009-04-11
  • 打赏
  • 举报
回复
1、一般可以更大,用setsockopt(pObj->trans_sd, SOL_SOCKET, SO_RCVBUF, (char*)&bufSize, sizeof(bufSize)等从大到小进行尝试设置即可

2、一般TCP的话,连接自动控制的,发送时检查已发字节数保证发送完,接收时保证接收完就行了。所以应该不用自己来确认接收通知。

3、大文件窗口一般用阻塞的TCP吧。当然,如果是WSAAsyncSelect模式的话,send()当然是非阻塞了。
  • 打赏
  • 举报
回复
1.客户端有一个1G的文件发送给服务器,那我开的缓存区是10KB,这个缓存够不够啊,能不能再大点啊。

反正你不可能一次传完1G的数据,分多次传就是了。

2.因为是1G的文件,每次10KB,那要发好多次数据包,我想问客户端是不是要等服务器收到数据包,在发送通知告诉客户端继续发呢?还是客户端一次性while发完不管服务器收没收到。

等服务器收完包,你再传,不然,缓冲区满了,新数据就会被丢弃。

3.我这个WSAAsyncSelect模式,send是阻塞还是非阻塞啊?明白了的话我应该会知道第2问了呵呵。

WSAAsyncSelect自动是非阻塞模式。

65,211

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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