当前位置: 首页 > news >正文

基于UDP的网络编程

UDP服务端

#ifdef _WIN32                           
#define _WINSOCK_DEPRECATED_NO_WARNINGS  #define close closesocket              
#include <winsock2.h>
#else  
#include <arpa/inet.h>
#include <netdb.h>
#include <netinet/in.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <unistd.h>
#endif#include <stdio.h>
#include <stdlib.h>
#include <string.h>#define PORT 8080  
#define MAXLINE 1024#ifdef _WIN32
void cleanup() { WSACleanup(); }
#endifint main()
{
#ifdef _WIN32WSADATA wsData;if (WSAStartup(MAKEWORD(2, 2), &wsData) != 0){perror("WSA Startup error: \n");return 0;}atexit(cleanup); 
#endifint sockfd;char buffer[MAXLINE];char *hello = "Hello from server";struct sockaddr_in servaddr, cliaddr;/* 创建socket */if ((sockfd = socket(AF_INET, SOCK_DGRAM, 0)) < 0){perror("socket creation failed");exit(EXIT_FAILURE);}memset(&servaddr, 0, sizeof(servaddr));memset(&cliaddr, 0, sizeof(cliaddr));servaddr.sin_family = AF_INET;  // IPv4servaddr.sin_addr.s_addr = INADDR_ANY;servaddr.sin_port = htons(PORT);/* 绑定服务端地址 */if (bind(sockfd, (const struct sockaddr *)&servaddr, sizeof(servaddr)) < 0){perror("bind failed");exit(EXIT_FAILURE);}unsigned int len;int n;n = recvfrom(sockfd, (char *)buffer, MAXLINE, MSG_WAITALL,(struct sockaddr *)&cliaddr, &len);buffer[n] = '\0';printf("Client : %s\n", buffer);sendto(sockfd, (const char *)hello, strlen(hello), 0,(const struct sockaddr *)&cliaddr, len);printf("Hello message sent.\n");close(sockfd);return 0;
}

UDP客户端

#ifdef _WIN32                           
#define _WINSOCK_DEPRECATED_NO_WARNINGS  #include <winsock2.h>
#define close closesocket 
#else                  
#include <arpa/inet.h>
#include <netdb.h>
#include <netinet/in.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <unistd.h>
#endif#include <stdio.h>
#include <stdlib.h>
#include <string.h>#define PORT 8080 
#define MAXLINE 1024#ifdef _WIN32
void cleanup() { WSACleanup(); }
#endifint main()
{
#ifdef _WIN32WSADATA wsData;if (WSAStartup(MAKEWORD(2, 2), &wsData) != 0){perror("WSA Startup error: \n");return 0;}atexit(cleanup); 
#endifint sockfd;char buffer[MAXLINE];char *hello = "Hello from client";struct sockaddr_in servaddr;/* 创建用户数据报类型的socket */if ((sockfd = socket(AF_INET, SOCK_DGRAM, 0)) < 0){perror("socket creation failed");exit(EXIT_FAILURE);}memset(&servaddr, 0, sizeof(servaddr));/* 填充协议信息 */servaddr.sin_family = AF_INET;servaddr.sin_port = htons(PORT);servaddr.sin_addr.s_addr = INADDR_ANY;int n;unsigned int len;sendto(sockfd, (const char *)hello, strlen(hello), 0,(const struct sockaddr *)&servaddr, sizeof(servaddr));printf("Hello message sent.\n");n = recvfrom(sockfd, (char *)buffer, MAXLINE, MSG_WAITALL,(struct sockaddr *)&servaddr, &len);buffer[n] = '\0';printf("Server : %s\n", buffer);close(sockfd);return 0;
}

客户端运行结果:

Hello message sent.
Server : Hello from server
 

服务端运行结果:

Client : Hello from client
Hello message sent.
 

http://www.lryc.cn/news/273529.html

相关文章:

  • vue判断组件有没有传入的slot有就渲染slot没有就渲染内部节点
  • MS713/MS713T:CMOS 低压、4Ω四路单刀单掷开关,替代ADG713
  • Android 内容生成pdf文件
  • Javaweb-日程管理
  • SwiftUI之深入解析如何创建一个灵活的选择器
  • 【模拟量采集1.2】电阻信号采集
  • c++牛客总结
  • ts相关笔记(基础必看)
  • Docker随笔
  • uni-app 前后端调用实例 基于Springboot
  • vue3+ts开发干货笔记
  • Android开发新的一年Flag
  • 好的OODA循环与快慢无关
  • Android 车联网——CarUserService介绍(十三)
  • 【开题报告】基于微信小程序的母婴商品仓库管理系统的设计与实现
  • 分布式锁相关问题(三)
  • grep!Linux系统下强大的文本搜索工具!
  • (学习打卡1)重学Java设计模式之设计模式介绍
  • docker 部署教学版本
  • 2023春季李宏毅机器学习笔记 05 :机器如何生成图像
  • C#和C++存储 和 解析 bin 文件
  • 【React系列】Redux(二)中间件
  • YOLOv8改进 | 2023Neck篇 | 利用Gold-YOLO改进YOLOv8对小目标检测
  • ubuntu环境安装配置nginx流程
  • 【LMM 010】MiniGPT-v2:使用独特的标识符实现视觉语言多任务学习的统一的多模态大模型
  • 人工智能如何重塑金融服务业
  • Iterable 对象转换为 Stream 对象
  • 基于Java+SpringBoot+vue+elementUI私人健身教练预约管理系统设计实现
  • 2024,启动(回顾我的2023)
  • Web网页开发-盒模型-笔记