Cmakelist.txt之win-c-udp-server

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_server
    LIBRARY 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.结果

相关推荐
迈巴赫车主2 分钟前
蓝桥杯 19717 挖矿java
java·开发语言·数据结构·算法·职场和发展·蓝桥杯
Sag_ever3 分钟前
Java String 类详解:字符串常用方法 + 不可变性 一网打尽
java·开发语言
顶点多余3 分钟前
死锁+线程安全
linux·开发语言·c++·系统安全
专注API从业者6 分钟前
淘宝 API 调用链路追踪实战:基于 SkyWalking/Pinpoint 的全链路监控搭建
大数据·开发语言·数据库·skywalking
jinanwuhuaguo7 分钟前
OpenClaw v2026.4.1 深度剖析报告:任务系统、协作生态与安全范式的全面跃迁
java·大数据·开发语言·人工智能·深度学习
小邓的技术笔记15 分钟前
Python 入门:从“其他语言”到 Pythonic 思维的完整迁移手册
开发语言·python
啥咕啦呛20 分钟前
跟着AI学java第4天:面向对象编程巩固
java·开发语言·人工智能
聆风吟º21 分钟前
【C标准库】深入理解C语言memcmp函数:内存比较的利器
c语言·开发语言·库函数·memcmp
艾莉丝努力练剑23 分钟前
【Linux线程】Linux系统多线程(一):线程概念
java·linux·运维·服务器·开发语言·学习·线程
低保和光头哪个先来23 分钟前
Axios 近期安全版本
开发语言·前端·javascript·前端框架