C++ UDP 发送的基础问题

天下如山 2017-03-19 07:55:10
各位大牛,请教一个简单的vc6.0 相关udp发送问题,之前没有做个这个方面的。代码如下:

CSocket Socket;
BOOL bBroadcast = TRUE;
BYTE buf[256]="123456789012345678901234567890123456789";
Socket.Create(1500,SOCK_DGRAM);
Socket.SetSockOpt(SO_BROADCAST,(const char*)&bBroadcast,sizeof(BOOL),SOL_SOCKET);
Socket.SendTo(buf,39,1500,"255.255.255.255");
if(28==Socket.Receive(buf,28)||28==Socket.Receive(buf,28)||28==Socket.Receive(buf,28))
{//有回码
CString msg;
msg.Format("查找到设备:%02X-%02X-%02X-%02X-%02X-%02X",buf[0],buf[1],buf[2],buf[3],buf[4],buf[5]);
msg.Format("模块IP地址:%d.%d.%d.%d",buf[16],buf[15],buf[14],buf[13]);
pM->AddString(msg);
return;
}


问题如下:
1.该UDP 发送的是否是组播?组播地址是不是255.255.255.255,端口号是1500?
2.Socket.Receive.这个看起来像是从组播读取到一些数据后需要做一些操作,那么这个socket监听的端口号和地址是什么?
Socket.Create(1500,SOCK_DGRAM);
Socket.SetSockOpt(SO_BROADCAST,(const char*)&bBroadcast,sizeof(BOOL),SOL_SOCKET);
应该是上面两句话。

以上,在线等。谢谢
...全文
417 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
银点 2017-03-22
  • 打赏
  • 举报
回复
引用 4 楼 sibiyellow 的回复:
[quote=引用 1 楼 silverpot 的回复:] 你组播地址错了吧! 播组地址中,有一部分由官方分配的,称为永久组播组。永久组播组保持不变的是它的ip地址,组中的成员构成可以发生变化。永久组播组中成员的数量都可以是任意的,甚至可以为零。那些没有保留下来供永久组播组使用的ip组播地址,可以被临时组播组利用。 224.0.0.0~224.0.0.255为预留的组播地址(永久组地址),地址224.0.0.0保留不做分配,其它地址供路由协议使用; 224.0.1.0~224.0.1.255是公用组播地址,可以用于Internet; 224.0.2.0~238.255.255.255为用户可用的组播地址(临时组地址),全网范围内有效; 239.0.0.0~239.255.255.255为本地管理组播地址,仅在特定的本地范围内有效。
没有错 。是本地组播 ,直接连接的硬件,不需要走路由,是和电脑直连的。 Socket.Create(1500,SOCK_DGRAM); Socket.SetSockOpt(SO_BROADCAST,(const char*)&bBroadcast,sizeof(BOOL),SOL_SOCKET); 这个是监听本地的1500端口吗?[/quote] 我今天没有带windows电脑,晚上回会给你点代码
银点 2017-03-21
  • 打赏
  • 举报
回复
想要接收UPD组播,你必须明确加入组播组才可以,你的代码作为UDP组播功能,除了地址错误,代码不全。实现不了UDP组播
银点 2017-03-21
  • 打赏
  • 举报
回复
你组播地址错了吧! 播组地址中,有一部分由官方分配的,称为永久组播组。永久组播组保持不变的是它的ip地址,组中的成员构成可以发生变化。永久组播组中成员的数量都可以是任意的,甚至可以为零。那些没有保留下来供永久组播组使用的ip组播地址,可以被临时组播组利用。 224.0.0.0~224.0.0.255为预留的组播地址(永久组地址),地址224.0.0.0保留不做分配,其它地址供路由协议使用; 224.0.1.0~224.0.1.255是公用组播地址,可以用于Internet; 224.0.2.0~238.255.255.255为用户可用的组播地址(临时组地址),全网范围内有效; 239.0.0.0~239.255.255.255为本地管理组播地址,仅在特定的本地范围内有效。
天下如山 2017-03-21
  • 打赏
  • 举报
回复
引用 1 楼 silverpot 的回复:
你组播地址错了吧! 播组地址中,有一部分由官方分配的,称为永久组播组。永久组播组保持不变的是它的ip地址,组中的成员构成可以发生变化。永久组播组中成员的数量都可以是任意的,甚至可以为零。那些没有保留下来供永久组播组使用的ip组播地址,可以被临时组播组利用。 224.0.0.0~224.0.0.255为预留的组播地址(永久组地址),地址224.0.0.0保留不做分配,其它地址供路由协议使用; 224.0.1.0~224.0.1.255是公用组播地址,可以用于Internet; 224.0.2.0~238.255.255.255为用户可用的组播地址(临时组地址),全网范围内有效; 239.0.0.0~239.255.255.255为本地管理组播地址,仅在特定的本地范围内有效。
没有错 。是本地组播 ,直接连接的硬件,不需要走路由,是和电脑直连的。 Socket.Create(1500,SOCK_DGRAM); Socket.SetSockOpt(SO_BROADCAST,(const char*)&bBroadcast,sizeof(BOOL),SOL_SOCKET); 这个是监听本地的1500端口吗?
  • 打赏
  • 举报
回复
255.255.255.255,受限的广播地址,只在当前网段(发出者所在的网段)广播,路由器(如果有的话)不向外转发。

13,871

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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