首页 > 编程语言 > 详细

C语言网络编程——UDP

时间:2021-04-15 23:39:46      阅读:49      评论:0      收藏:0      [点我收藏+]

2.1 基于UDP的网络编程

技术分享图片

2.2.1 服务端实现

  1. 使用socket函数,创建一个socket
  2. 使用bind()函数,绑定ip地址、端口等信息到socket上
  3. 使用recvfrom()函数,循环接收数据
  4. 关闭网络
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>

#define PORT 3212
#define MAX_SIZE 512

int main(int argc, char *argv[])
{
    int sockfd;
    int len = sizeof(struct sockaddr);
    char buf[MAX_SIZE];
    char buffer[MAX_SIZE];
    struct sockaddr_in serv_addr;

    sockfd = socket(AF_INET, SOCK_DGRAM, 0);
    if (sockfd < 0)
    {
        printf("创建socket失败!");
        exit(1);
    }
    // 填充服务器端信息
    bzero(&serv_addr, sizeof(struct sockaddr_in));
    serv_addr.sin_family = AF_INET;
    serv_addr.sin_port = htons(PORT);
    serv_addr.sin_addr.s_addr = inet_addr("192.168.192.128");
    // 绑定套接字
    if (bind(sockfd, (struct sockaddr *)&serv_addr, sizeof(struct sockaddr)) < 0)
    {
        printf("绑定失败");
        exit(1);
    }

    // 循环接收网络上发送来的数据并回复消息
    while (1)
    {
        if (recvfrom(sockfd, buf, MAX_SIZE, 0, (struct sockaddr *)&serv_addr, &len) < 0)
        {
            printf("接收失败");
            exit(1);
        }
        printf("recv is: %s\n", buf);
        printf("write some text: ");
        scanf("%s", buffer);
        // 发送数据
        if (sendto(sockfd, buffer, MAX_SIZE, 0, (struct sockaddr *)&serv_addr, len) < 0)
        {
            printf("发送失败");
            fprintf(stderr, "send error: %s\n", strerror(errno));
            exit(1);
        }
    }
    close(sockfd);
    return 0;
}

2.2.2 客户端实现

  1. 使用socket()函数,创建一个socket
  2. 设置要连接的对方的ip地址和端口等信息。
  3. 使用sendto()函数,发送数据
  4. 关闭网路
#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>

#define PORT 3212
#define MAX_SIZE 512

int main()
{
    int sockfd;
    int fromlen = sizeof(struct sockaddr);
    char buf[MAX_SIZE];
    char buffer[MAX_SIZE];
    struct sockaddr_in serv_addr;

    // 填充服务端信息
    bzero(&serv_addr, sizeof(struct sockaddr_in));
    serv_addr.sin_family = AF_INET;
    serv_addr.sin_port = htons(PORT);
    serv_addr.sin_addr.s_addr = inet_addr("192.168.192.128");
    // 创建套接字
    sockfd = socket(AF_INET, SOCK_DGRAM, 0);
    if (sockfd < 0)
    {
        printf("create socket error!\n");
        exit(1);
    }

    // 循环发送数据到服务端及接收数据
    while (1)
    {
        printf("enter some text: ");
        scanf("%s", buf);
        // 发送数据
        if (sendto(sockfd, buf, MAX_SIZE, 0, (const struct sockaddr *)&serv_addr, sizeof(struct sockaddr)) < 0)
        {
            printf("recv error!\n");
            exit(1);
        }
        if (recvfrom(sockfd, buffer, MAX_SIZE, 0, (struct sockaddr *)&serv_addr, &fromlen) < 0)
        {
            printf("recv error!\n");
            exit(1);
        }
        printf("recv is %s\n", buffer);
    }
    close(sockfd);
    return 0;
}

C语言网络编程——UDP

原文:https://www.cnblogs.com/qq760153699/p/14664212.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!