基于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(); }
#endif


int main()
{
#ifdef _WIN32
    WSADATA wsData;
    if (WSAStartup(MAKEWORD(2, 2), &wsData) != 0)
    {
        perror("WSA Startup error: \n");
        return 0;
    }

    atexit(cleanup); 
#endif

    int 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;  // IPv4
    servaddr.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(); }
#endif

int main()
{
#ifdef _WIN32
    WSADATA wsData;
    if (WSAStartup(MAKEWORD(2, 2), &wsData) != 0)
    {
        perror("WSA Startup error: \n");
        return 0;
    }

    atexit(cleanup); 
#endif

    int 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.
 

相关推荐

  1. 基于UDP网络编程

    2024-01-01 07:04:05       32 阅读
  2. 网络编程】-- 04 UDP

    2024-01-01 07:04:05       39 阅读
  3. linux网络----UDP编程

    2024-01-01 07:04:05       35 阅读
  4. 网络UDP编程

    2024-01-01 07:04:05       19 阅读

最近更新

  1. TCP协议是安全的吗?

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

    2024-01-01 07:04:05       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-01 07:04:05       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-01 07:04:05       18 阅读

热门阅读

  1. 使用C语言的strtok函数来分割字符串

    2024-01-01 07:04:05       37 阅读
  2. 深度学习 | ModernTCN模型结构

    2024-01-01 07:04:05       44 阅读
  3. ios 上textarea placeholder不换行的问题

    2024-01-01 07:04:05       40 阅读
  4. 分布式【4. 什么是 CAP?】

    2024-01-01 07:04:05       34 阅读
  5. c# 让文件只读

    2024-01-01 07:04:05       31 阅读
  6. Prometheus监控nginx

    2024-01-01 07:04:05       36 阅读
  7. 在Neo4j中实现推荐算法

    2024-01-01 07:04:05       37 阅读
  8. 数据挖掘与知识发现:解析关键概念

    2024-01-01 07:04:05       25 阅读
  9. 常用的几种包管理器 npm yarn cnpm pnpm 安装

    2024-01-01 07:04:05       41 阅读