Cmakelist.txt之win-c-udp-server

news/2024/11/27 0:38:22/

1.cmakelist.txt

cmake_minimum_required(VERSION 3.16)
​
project(c_udp_server LANGUAGES C)
​
add_executable(c_udp_server main.c)
​
# link_directories("D:/Environment/mingw64/x86_64-w64-mingw32/lib")
​
target_link_libraries(c_udp_server wsock32)
​
include(GNUInstallDirs)
install(TARGETS c_udp_serverLIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
)
​

2.测试代码

#include <stdio.h>
#include <stdlib.h>
#include <winsock2.h>
#include <ws2tcpip.h>
​
// #pragma comment(lib, "ws2_32.lib")
​
#define PORT 8888
#define BUFFER_SIZE 1024
​
int main() {printf("server start---\n");WSADATA wsaData;int server_socket;struct sockaddr_in server_addr, client_addr;int client_addr_len = sizeof(client_addr);char buffer[BUFFER_SIZE];
​// 初始化Winsock库if (WSAStartup(MAKEWORD(2, 2), &wsaData)!= 0) {perror("WSAStartup failed");return 1;}
​// 创建UDP套接字if ((server_socket = socket(AF_INET, SOCK_DGRAM, 0)) == INVALID_SOCKET) {perror("Socket creation failed");WSACleanup();return 1;}
​// 初始化服务器地址结构server_addr.sin_family = AF_INET;server_addr.sin_port = htons(PORT);server_addr.sin_addr.s_addr = INADDR_ANY;
​// 绑定套接字到指定地址和端口if (bind(server_socket, (struct sockaddr *)&server_addr, sizeof(server_addr)) == SOCKET_ERROR) {perror("Bind failed");closesocket(server_socket);WSACleanup();return 1;}printf("Server is waiting for incoming messages...\n");while (1) {// 接收来自客户端的数据int recv_len = recvfrom(server_socket, buffer, BUFFER_SIZE - 1, 0,(struct sockaddr *)&client_addr, &client_addr_len);if (recv_len == SOCKET_ERROR) {perror("Receive failed");continue;}buffer[recv_len] = '\0';
​printf("Received message from client: %s", buffer);
​// 发送响应给客户端---执行实际操作数据处理const char *response = "Message received successfully";int send_len = sendto(server_socket, response, strlen(response), 0,(struct sockaddr *)&client_addr, client_addr_len);if (send_len == SOCKET_ERROR) {perror("Send failed");continue;}}
​closesocket(server_socket);WSACleanup();return 0;
}
 

3.结果


http://www.ppmy.cn/news/1550190.html

相关文章

Ubuntu24.04下的docker问题

按官网提示是可以安装成功的&#xff0c;但是curl无法使用https下载&#xff0c;会造成下述语句执行失败 # Add Dockers official GPG key: sudo apt-get update sudo apt-get install ca-certificates curl sudo install -m 0755 -d /etc/apt/keyrings sudo curl -fsSL https…

深入解析常见的设计模式

在本篇博文中&#xff0c;我们将逐个深入解析常见的设计模式&#xff0c;包括它们的目的、结构和具体示例&#xff0c;帮助你更好地理解和应用这些模式。 一、创建型模式 1. 单例模式&#xff08;Singleton&#xff09; 目的&#xff1a;确保一个类只有一个实例&#xff0c;…

前端数据可视化思路及实现案例

目录 一、前端数据可视化思路 &#xff08;一&#xff09;明确数据与目标 &#xff08;二&#xff09;选择合适的可视化图表类型 &#xff08;三&#xff09;数据与图表的绑定及交互设计 &#xff08;四&#xff09;页面布局与样式设计 二、具体案例&#xff1a;使用 Ech…

SQL99版链接查询语法

连接查询按照功能分类 内连接 等值连接 非等值连接 自连接 //92SQL 外连接&#xff1a; //红色的连接查询类型92版SQL 左外连接 右外连接 全外连接 交叉连接 #剩下连接类型的SQL语法就不是前面同一个发布版本了 99版SQL语法格式区别于92版的是连接不在是用“”了&am…

Linux字符串中的大写字母转换为小写字母

echo $1 | tr A-Z a-z 是一个 Unix/Linux 命令组合&#xff0c;作用是将输入的字符串中的大写字母转换为小写字母。 详细解释&#xff1a; 1. echo $1&#xff1a; echo 命令用于输出其后的内容。$1 是一个变量&#xff0c;表示传给脚本或命令的第一个参数。如果你在命令行中执…

Ajax学习笔记,第一节:语法基础

Ajax学习笔记&#xff0c;第一节&#xff1a;语法基础 一、概念 1、什么是Ajax 使用浏览器的 XMLHttpRequest 对象 与服务器通信2、什么是axios Axios是一个基于Promise的JavaScript库&#xff0c;支持在浏览器和Node.js环境中使用。相较于Ajax&#xff0c;Axios提供了更多…

现代密码学

概论 计算机安全的最核心三个关键目标&#xff08;指标&#xff09;/为&#xff1a;保密性 Confidentiality、完整性 Integrity、可用性 Availability &#xff0c;三者称为 CIA三元组 数据保密性&#xff1a;确保隐私或是秘密信息不向非授权者泄漏&#xff0c;也不被非授权者使…

嵌入式的C/C++:深入理解 static、const 与 volatile 的用法与特点

目录 一、static 1、static 修饰局部变量 2、 static 修饰全局变量 3、static 修饰函数 4、static 修饰类成员 5、小结 二、const 1、const 修饰普通变量 2、const 修饰指针 3、const 修饰函数参数 4. const 修饰函数返回值 5. const 修饰类成员 6. const 与 #defi…