网络中UDP编程

网络

1.recvfrom

    ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags,
                        struct sockaddr *src_addr, socklen_t *addrlen);
    功能:
        从套接字中接收数据
    参数:
        sockfd:套接字文件描述符
        buf:存放数据空间首地址
        flags:属性 默认为0 
        src_addr:存放IP地址信息的空间首地址
        addrlen:存放接收到IP地址大小空间的首地址
    返回值:
        成功返回实际接收字节数
        失败返回-1 

修改虚拟机到桥接模式:

    点击"虚拟机"
    点击"设置"
    点击"网络适配器"
    选择"桥接模式"
    点击"确定"

将网卡桥接到无线网卡

    点击"编辑"
    点击"虚拟网络编辑器"
    点击"更改设置"

在Ubuntu中重启网络服务

    sudo /etc/init.d/networking restart  --- 重启网络

    ifconfig  ---  查看linux的网络ip地址

2.bind 

   int bind(int sockfd, const struct sockaddr *addr,
                socklen_t addrlen);
    功能:
        在套接字上绑定一个IP地址和端口号
    参数:
        sockfd:套接字文件描述符
        addr:绑定IP地址空间首地址
        addrlen:绑定IP地址的长度
    返回值:
        成功返回0 
        失败返回-1 


3.UDP编程:

    发端:socket (创建套接字文件)-> sendto(发端) -> close 
    收端:  socket(创建套接字文件)-> bind (定义收端的端口和ip)-> recvfrom(收端) ->                        close 

eg:发端代码   /    收端代码

#include"head.h"

int main(void)                  //发端
{
	int sockfd = 0;
	struct sockaddr_in sendaddr;
	char tmpbuff[1024] = {0};   //储存发送内容的信息
	ssize_t nsize = 0;

	fgets(tmpbuff,sizeof(tmpbuff),stdin);

	sockfd = socket(AF_INET, SOCK_DGRAM, 0);   //数据报套接字        //创建一个用来通信的文件描述符
	if(sockfd == -1)
	{
		perror("fail to socket");
		return -1;
	}

	sendaddr.sin_family = AF_INET; //协议族
	sendaddr.sin_port = htons(50000);   //端口号    //将本地字节序转换为网络的大端字节序   //要发送的主机端口号
	sendaddr.sin_addr.s_addr = inet_addr("192.168.1.182");   //ip    //将字符串IP地址转换内存中的ip地址    //要发送的主机ip号
	nsize = sendto(sockfd, tmpbuff, strlen(tmpbuff), 0, (struct sockaddr *)&sendaddr, sizeof(sendaddr)); //利用套接字向指定地址发送数据信息
    if (-1 == nsize)
	{
		perror("fail to sendto");
		return -1;
	}

	printf("已发送个 %ld 字节1\n",nsize);

	close(sockfd);

	return 0;

}
#include"head.h"

int main(void)                                     //收端
{
	int sockfd = 0;
	int ret = 0;
	struct sockaddr_in recvaddr; 
	struct sockaddr_in tmpaddr;          //存储收信息的主机的端口和ip
	char tmpbuff[1024] = {0};
	ssize_t nsize = 0;
	socklen_t addrlen =  sizeof(tmpaddr);

	sockfd = socket(AF_INET, SOCK_DGRAM, 0);
	if (-1 == sockfd)
	{
		perror("fail to socket");
		return -1;
	}

	/* 绑定自己的端口和ip地址 */     //ip地址 用ifconfig 查看
	recvaddr.sin_family = AF_INET;
	recvaddr.sin_port = htons(30000);
	recvaddr.sin_addr.s_addr = inet_addr("192.168.1.176");
	ret = bind(sockfd, (struct sockaddr *)&recvaddr, sizeof(recvaddr));
	if(ret == -1)
	{
		perror("fail to bind");
		return -1;
	}

	/* 接收的信息内容 */
	nsize = recvfrom(sockfd,tmpbuff,sizeof(tmpbuff),0,(struct sockaddr *)&tmpaddr,&addrlen);
	if (-1 == nsize)
	{
		perror("fail to recvfrom");
		return -1;
	}

	printf("接收到了%ld个字节\n",nsize);

	printf("RECV ASCII FROM %s:%d>%s\n", inet_ntoa(tmpaddr.sin_addr), ntohs(tmpaddr.sin_port), tmpbuff);    //打印接收信息的主机的端口和ip地址
	close(sockfd);

	return 0;


}

4.UDP需要注意的细节点:

    1.UDP是无连接,发端退出,收端没有任何影响
    2.UDP发送数据上限,最好不要超过1500个字节
    3.UDP是不安全不可靠的,连续且快速的传输数据容易产生数据丢失

5.wireshark  抓包工具

  操作流程:
    1.sudo wireshark
      打开wireshark抓包工具
    2.选择抓取数据包的网卡
      any
    3.执行通信的代码
    4.停止通信
    5.设定过滤条件
        ip.addr == IP地址 
        udp 
        tcp 
        udp.port == 端口

6.UDP包头长度:8个字节

    源端口号(2个字节)
    目的端口号(2个字节)
    长度(2个字节)
    校验和(2个字节)

相关推荐

  1. 网络UDP编程

    2024-03-10 04:40:07       21 阅读
  2. 网络编程】-- 04 UDP

    2024-03-10 04:40:07       39 阅读
  3. linux网络----UDP编程

    2024-03-10 04:40:07       36 阅读
  4. 网络UDP编程

    2024-03-10 04:40:07       15 阅读
  5. UDP网络编程

    2024-03-10 04:40:07       17 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-03-10 04:40:07       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-10 04:40:07       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-10 04:40:07       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-10 04:40:07       20 阅读

热门阅读

  1. 华为荣耀终端机试真题

    2024-03-10 04:40:07       19 阅读
  2. 【代码】Android|获取存储权限并创建、存储文件

    2024-03-10 04:40:07       25 阅读
  3. 使用大带宽服务器对网站有什么好处?

    2024-03-10 04:40:07       24 阅读
  4. 【C#语言入门】15. 方法参数进阶,扩展方法

    2024-03-10 04:40:07       23 阅读
  5. AWS认证

    2024-03-10 04:40:07       22 阅读
  6. 使用conda安装rasa macbook亲测有效

    2024-03-10 04:40:07       20 阅读