【关于socekt 缓冲区】

_船长_ 2015-02-05 07:15:46
关于socket 发送/接收缓冲区问题,请教一下大家,对于UDP发送数据而言,sendto函数只是将缓冲区内容拷贝到内核缓冲区后返回,每次发送1024Bytes,不断发送,直到接收来自服务端停止发送通知,但此时发送缓冲区还存在数据,还会继续发送,我的目的是打算在接收到发送停止通知后,把发送缓冲区的内容清空,想到的方式是关闭socket,但这种方式再发送时还要创建socket,大家对于此种情况,有没有比较好的方式?
...全文
316 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
Eleven 2015-02-06
  • 打赏
  • 举报
回复
你调用closesocket关闭以后,要想重新发送就必须重新创建socket。 另外一般创建的SOCKET的时候设置SO_REUSEADDR
Sandrer 2015-02-06
  • 打赏
  • 举报
回复
你可以在接收端设置一个标志,接收端在给发送端发出“停止"命令后,设置标志,然后把设置标志后所收到的内容忽略掉不作处理 我搞不懂你为什么要用udp来连续发送数据 说你用来发送文件吧?udp发送文件不可靠啊,一般都用tcp来保证数据完整性,udp只适合短跑不适合长跑 说你用来防丢包而一路发过去吧,那多浪费资源啊,一般用udp发送间断数据的都是用超时来判断是否发送成功的。一般udp数据send返回后就设置定时器,规定时间内没收到反馈包就重发,重发n次还是没收到反馈包就直接判断发送失败了 哪会有人像你这样用udp拼命发数据的,反正我是没见过
信阳毛尖 2015-02-06
  • 打赏
  • 举报
回复
这样做不行吗?

bool bStopSend = false;
bool bExit = false; 
char szBuff[1024] = {0};

while(!bExit)
{
	while(!bStopSend)	//当收到停止发送时,就不发送了
	{
		//memcpy(szBuff,...);
		if(sendto(sockfd, szBuff, 1024, 0, (struct sockaddr *)&Server_addr,sizeof(Server_addr))<0)
		{
			shutdown(sockfd,2);
			return -1;
		}
		Sleep(100);
	}
}
笨笨仔 2015-02-05
  • 打赏
  • 举报
回复
缩小你的数据块长度

18,356

社区成员

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

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