网络通信基础
如果网络中两个主机上的应用程序要相互通信,其一要知道彼此的IP,其二要知道程序可监听的端口。因为同一主机上的程序使用网络是通过端口号来区分的。
UDP Socket的使用过程:
1. 初始化网络库
2. 创建SOCK_DGRAM类型的Socket。
3. 绑定套接字。
4. 发送、接收数据。
5. 销毁套接字。
6. 释放网络库。
广播数据包的原理:
专门用于同时向网络中所有工作站进行发送的一个地址叫做广播地址。在使用TCP/IP
协议的网络中,主机标识段host ID 为全1
的IP 地址为广播地址。如果你的IP为:192.168.1.39,子网掩码为:255.255.255.0,则广播地址为:192.168.1.255;如果IP为192.168.1.39,子网掩码为:255.255.255.192,则广播地址为:192.168.1.63。
如果只想在本网络内广播数据,只要向广播地址发送数据包即可,这种数据包可以被路由,它会经由路由器到达本网段内的所有主机,此种广播也叫直接广播;如果想在整个网络中广播数据,要向255.255.255.255发送数据包,这种数据包不会被路由,它只能到达本物理网络中的所有主机,此种广播叫有限广播。
使用UDP协议发送、接收广播包的过程。
假如我们要向192.168.0.X,子网掩码为:255.255.255.0的子网中发送广播包。
其步骤如下:
1. 初始化Winsock库。
2. 创建SOCK_DIRAM类型的Socket。
3. 设置Socket的属性允许其广播。
4. 发送数据包到192.168.0.255
5. 接收自己广播的广播包。
6. 关闭Socket
7. 释放网络库。
注意事项如下:
1. 接收方一定要知道广播方的口号,然后绑定此端口号才能正确接收。
2. 接收方的Socket不需要设置成广播属性。
3. 绑定的IP不可以使用“127.0.0.1”,可以使用真实IP地址或者INADDR_ANY。否则接收失败。
参考代码:
#include <stdio.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
//*-----------变量,数据类型宏定义-------------------
#define PORT 3387
#define MAX 255
int main(void)
{
int sockfd, ret;
int size, len;
int so_broadcast=1;
struct sockaddr_in my_con;
struct sockaddr_in cl_con;
char snd[MAX] = "123456789";
char rec[MAX];
//创建socket
sockfd = socket(AF_INET, SOCK_DGRAM, 0);
if(sockfd < 0)
{
perror("socket error!\n");
exit(1);
}
//创建套接口
my_con.sin_family = AF_INET;
my_con.sin_port = ntohs(PORT);
my_con.sin_addr.s_addr = inet_addr("192.168.1.255");
len = sizeof(struct sockaddr);
setsockopt(sockfd,SOL_SOCKET,SO_BROADCAST,&so_broadcast,sizeof(so_broadcast));
//绑定套接口
if(bind(sockfd, (struct sockaddr *) &my_con, len) < 0)
{
perror("bind error!\n");
exit(1);
}
//数据传输处理
ret = sendto(sockfd, snd, strlen(snd), 0, (struct sockaddr *) &my_con, len);
if(ret < 0)
{
perror("send error!\n");
exit(1);
}
printf("发送广播数据:%s\n",snd);
size=sizeof(cl_con);
ret = recvfrom(sockfd,rec,MAX,0,(struct sockaddr *)&cl_con,&size);
rec[ret] = '\0';
printf("接收广播数据:%s\n",rec);
close(sockfd);
return 0;
}
分享到:
相关推荐
这个是·基于Delphi开发的UDP广播和单薄的通讯示例,附有代码
一个简单的C++ UDP接收结构体数据的例子,包含大小端转换说明,博客https://blog.csdn.net/guimaxingtian/article/details/100030614中的最终代码
一个高速udp接收程序,多线程数据保存,项目需要20M接收不丢包,测试在20M速度下可正常接收不丢包。
UDP广播发送和接收的VC程序,包含注释,UDP广播也算是UDP传输的基础知识,本程序为本人自己编写,也经过调试。
制定udp广播的端口(如果收发用同一个端口就会一直接收到自己给自己广播的消息)2.启动后向局域网广播约定的字符串(字符串包含了广播端的IP和用来接收响应的端口号)3.设备需要内置一个功能,打开约定的接收广播...
支持广播包的发送和接收,添加右键删除显示功能; -2.修复无网卡时发送出错。 1.可收发TCP/UDP数据。 2.对于TCP,支持服务器和客户端模式。 3.支持多连接,可同时对多路网络连接进行操作。 4.对于UDP,支持组播...
W5500使用UDP模式实现与上位机通讯,数据可以接收跟发送
内容索引:VB源码,网络相关,UDP 发送和接收基于UDP的广播,程序由发送端和接收端组成,各司其责,在发送端输入内容,点击“发送”后,接收端能收到信息,UDP的点对点消息发送程序,有兴趣的可下载参阅。环境下。
支持广播包的发送和接收,添加右键删除显示功能; -2.修复无网卡时发送出错。 1.可收发TCP/UDP数据。 2.对于TCP,支持服务器和客户端模式。 3.支持多连接,可同时对多路网络连接进行操作。 4.对于UDP,支持组播...
对GCDAsyncUdpSocket的简单封装,作为发送和接受广播,一般UDP报文的接口,专门处理udp的发送和接受,并且广播消息单独处理,便于管理
支持广播包的发送和接收,添加右键删除显示功能; -2.修复无网卡时发送出错。 1.可收发TCP/UDP数据。 2.对于TCP,支持服务器和客户端模式。 3.支持多连接,可同时对多路网络连接进行操作。 4.对于UDP,支持组播...
在linux下的udp通信,采用c语言编写,可实现简单的文件下载与上传,适用于初学者
UDP是轻量的、不可靠的、面向数据报、无连接的协议,它可以用于对可靠性要求不高的场合,和TCP通信不同,两个程序之间进行UDP通信无需...UDP单播 、组播、广播,使用Qt实现,工程文件包,下载解压缩直接导入工程即可
包含示例、已编译类库和类库源码 JAR包封装来自https://github.com/EspressifApp/EsptouchForAndroid
MFC实现的播和广播的例子……主要是udp发送和接收组播和广播包……
* 服务器没收到一个0x13响应包,才能继续发下一个0x12包,已放置UDP的丢包,另外每个0x12包最多发送10次而无0x13包的响应,则发送进程结束,界面提示 * * 本程序已经封装好,调用见TransportFilesActivity....
它在所有网络接口上侦听发往IPv4地址255.255.255.255的传出UDP广播数据包。 当程序接收到任何此类数据包时,它将在具有C类子网掩码的所有网络接口(除了已经在其上发送的接口)上发送该数据包。 换句话说,当程序...
##简介 轻量级的onvif设备搜索C++客户端。... 3、高效线程池处理udp收包,尽可能不丢包,不遗漏设备. 4、增加一个win32的可执行文件,运行后可搜索所处局域网内所有的onvif设备,用于验证代码可用性。
两台或多台android设备,其中有一台作为服务端,则另外一台或几台作为客户端,然后通过UDP进行自动连接.其实现的原理很简单,服务端这一边通过MulticastSocket将自己的有关信息,如IP,端口等广播出去,同一个广播地址里面...
ASocket 是一个TCP/UDP协议的封装库,方便快速实现TCP的长连接与UDP的单播、组播、广播等相关通信。 通过 ASocket 统一管理 TCP/UDP 相关 Socket,让其适用于Android,在UI主线程调用和回调,在子线程异步处理消息...