udp如何判断接包是否收到!

yjje 2006-03-15 06:06:39
在UDP中如何判断数据包是否完全接收.



如果没有接收用什么办法让重发!!!!!

...全文
432 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
9731boy 2006-03-16
  • 打赏
  • 举报
回复
一般UDP的包要小于MTU的值.如果能正常接收,那一般都是正确收到的,如果需要重发,你需要自己定一些协议,
「已注销」 2006-03-16
  • 打赏
  • 举报
回复
=0。刚才说错了,
「已注销」 2006-03-16
  • 打赏
  • 举报
回复
recvform返回的值>0说明有数据接受完了
要重发的话,要自定义好协议,让发送方重复发就是了,
9731boy 2006-03-16
  • 打赏
  • 举报
回复
int n = 0;
chat buff[255];
do
{
n = fread(buff,sizeof(buff),1,fp);
if (n > 0)
{
buff[n] = '\0';
sendto(pm.PrimaryUDP,(const char*)buff,n,0,(const sockaddr*)&sender,sizeof(sender));
}
else
{
break;
}


}while(!feof(fp));

大概是这样了,我也知道能不能编译
quanbaoxiao 2006-03-16
  • 打赏
  • 举报
回复
可以要求对方对每一个发出的数据报返回一个确认,或者接受完指定的数据后发回确认。类似下面这样子:
创建一个工作线程:

CCriticalSection g_cs ;

DWORD WINAPI ThreadCheck(LPVOID lPvoid)
{
CMsg msg ;
while(1)
{
int rec = recvfrom(s , (char*)&msg , sizeof(msg) , ...) ;
if(msg.iType == UDPACK)
{
g_cs.Lock()
g_bAck = TRUE ;
g_cs.Unlock() ;
}
}
}

BOOL SendUDP()
{
while(1)
{
g_cs.Lock() ;
g_bAck = FALSE ;
g_cs.Unlock() ;

sendto(...) ;

Sleep(100) ;//等待返回确认

g_cs.Lock() ;
if(g_bAck==TRUE)
{
g_cs.Unlock() ;
break ;
}
g_cs.Unlock() ;

}
}
yjje 2006-03-16
  • 打赏
  • 举报
回复
do
{
fread(ch,sizeof(char),255,fp);
sendto(pm.PrimaryUDP,(const char*)&ch,sizeof(ch),0,(const sockaddr *)&sender,sizeof(sender));
//cout<<"发送数据中.."<<endl;


}while(!feof(fp));

我是用上面方法发送数据的, 请高手帮忙看看
yjje 2006-03-16
  • 打赏
  • 举报
回复
我是初学.听了不太明白可以给一个小例子吗.

谢谢!

18,356

社区成员

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

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