[X]关闭

网络编程_4day_udp

文档创建者:ぉ沙皮狗的忧伤
浏览次数:3451
最后更新:2021-03-11
本帖最后由 ぉ沙皮狗的忧伤 于 2021-3-11 17:35 编辑

截图202103111559399591..png
截图202103111602489689..png
一、sever端代码编写
代码编写流程
        ①、添加头文件
        ②、创建数字报套接字
        ③、绑定本地IP和地址端口
        ④、读数据

1、添加头文件
  1. //添加头文件
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <string.h>
  5. #include <strings.h>
  6. #include <unistd.h>
  7. #include <arpa/inet.h>
  8. #include <sys/types.h>
  9. #include <sys/socket.h>
  10. #include <netinet/in.h>
  11. #include <netinet/ip.h>
复制代码
2、创建数字报套接字
  1. //创建数字报套接字
  2. //参数1----地址协议族,AF_INET网络协议族
  3. //参数2----套接字类型,SOCK_DGRAM使用UDP协议
  4. //参数3----protocol参数通常设置为0
  5. //返回值---成功返回socket id,失败返回-1
  6. serfd = socket( AF_INET, SOCK_DGRAM, 0);
  7. if(serfd < 0){
  8.     perror("socket failed!\n");
  9.     exit(1);
  10. }
复制代码
3、绑定本地IP和地址端口
  1. //绑定本地IP和指定端口
  2. struct sockaddr_in self;
  3. bzero( &self, sizeof(self));
  4. self.sin_family = AF_INET;              //网络协议族
  5. self.sin_port = htons(9999);            //要连接的服务器端口
  6. self.sin_addr.s_addr = htonl(INADDR_ANY);    //内核自动绑定本地所有的IP
  7. ret = bind( serfd, (struct sockaddr *)&self, sizeof(self));
  8. if(ret < 0){
  9.     perror("bind failed!\n");
  10.     exit(1);
  11. }
复制代码
4、读数据
     UDP是不可靠的无连接的协议,在数据发送前不需要进行连接
  1. //读数据
  2. while(1){
  3.     bzero( buf, 1024);
  4.     //接收数据
  5.     //参数1----标识一个已连接的套接字
  6.     //参数2----接收数据缓冲区
  7.     //参数3----缓冲长度
  8.     //参数4----调用操作方式
  9.     //参数5----指向装有源地址的缓冲区
  10.     //参数6----指向from缓冲区长度值
  11.     ret = recvfrom( serfd, buf, 1023, 0, (struct sockaddr *)&cli, &len);
  12.     if(ret < 0){
  13.         perror("recvform failed!\n");
  14.         exit(1);
  15.     }
  16.     printf(" client ip = %s port = %d buf:%s\n", inet_ntoa(cli.sin_addr),\
  17.         ntohs(cli.sin_port), buf);
  18. }
复制代码

二、client端代码编写
client代码编写流程
        ①、添加头文件
        ②、建立数据报套接字
        ③、指定服务器端口和ip地址
        ④、写数据
1、添加头文件
  1. //添加头文件
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <string.h>
  5. #include <strings.h>
  6. #include <arpa/inet.h>
  7. #include <sys/types.h>
  8. #include <sys/socket.h>
  9. #include <netinet/in.h>
  10. #include <netinet/ip.h>
复制代码
2、建立数据报套接字
  1. //建立数据报套接字
  2. serfd = socket( AF_INET, SOCK_DGRAM);
  3. if(serfd < 0){
  4.     perror("socket failed!\n");
  5.     exit(1);
  6. }
复制代码
3、指定服务器端口和IP
  1. struct sockaddr_in self;
  2. bzero( &self, sizeof(self));
  3. self.sin_family = AF_INET;
  4. self.sin_port = htons(9999);
  5. self.sin_addr.s_addr = inet_addr("172.18.21.163");
复制代码
4、通过fgets获取标准输入中键盘的数据,输入serfd套接字中,通过udp发送给服务器
  1. //写数据
  2. while(1){
  3.     bzero( buf, 128);
  4.     fgets( buf, 1218, stdin);
  5.     //用来将数据由指定的socket传给对方主机
  6.     //参数1-----已经连接的套接字
  7.     //参数2-----传递的数据
  8.     //参数3-----数据长度
  9.     //参数4-----标志位,一般设置0
  10.     //参数5-----服务器的端口及ip
  11.     //参数6-----sockaddr结构体的大小
  12.     //返回值----成功返回实际传递出去的字符数,失败返回-1
  13.     ret = sendto( serfd, buf, strlen(buf), 0, (struct sockaddr *)&self, sizeof(self));
  14.     if(ret < 0){
  15.         perror("sendto failed!\n");
  16.         exit(1);
  17.     }
  18. }
复制代码

三、编译代码使用gcc编译sever代码,使用交叉编译工具编译client代码
截图202103111721337539..png
先执行sever端代码。然后在板卡上执行client代码
截图202103111734159953..png 代码在附件中

udp_core.tar.gz

6.78 KB, 下载次数: 175

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则