ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

linux UDP C++网络编程演示

2021-02-09 23:59:40  阅读:209  来源: 互联网

标签:UDP socket C++ server fd linux include recv addr


1.引用头文件

#include <iostream>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

2.创建数据报套接字

int socket_fd = socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP);
    if (socket_fd<0)
    {
        perror("创建socket失败");
        exit(-1);

    }

3.绑定套接字

struct sockaddr_in server_addr;
    bzero(&server_addr, sizeof(server_addr));
    server_addr.sin_port=htons(port);
    server_addr.sin_addr.s_addr = htons(INADDR_ANY);
    server_addr.sin_family = AF_INET;

    if(bind(socket_fd,(struct sockaddr*)&server_addr, sizeof(server_addr)))
    {
        perror("绑定UDP服务失败");
        close(socket_fd);
        exit(-1);
    }

4.接收与发送数据

sendto(socket_fd,send_buf, strlen(send_buf),0,(struct sockaddr*)&client_addr,client_addr_len);
        int recv_len = recvfrom(socket_fd,recv_buf, sizeof(recv_buf),0,(struct sockaddr*)&client_addr,&client_addr_len);
        if (recv_len>0)
        {
            printf("%s\n",recv_buf);
        }

服务器完整代码:

#include <iostream>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main() {
    std::cout << "UDP网络编程!" << std::endl;

    unsigned short port=8000;
    int socket_fd = socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP);
    if (socket_fd<0)
    {
        perror("创建socket失败");
        exit(-1);

    }

    struct sockaddr_in server_addr;
    bzero(&server_addr, sizeof(server_addr));
    server_addr.sin_port=htons(port);
    server_addr.sin_addr.s_addr = htons(INADDR_ANY);
    server_addr.sin_family = AF_INET;

    if(bind(socket_fd,(struct sockaddr*)&server_addr, sizeof(server_addr)))
    {
        perror("绑定UDP服务失败");
        close(socket_fd);
        exit(-1);
    }

    char send_buf[512]="udp server message";
    char recv_buf[512]="";
    unsigned short client_port = 9000;
    struct sockaddr_in client_addr;
    socklen_t client_addr_len = sizeof(sockaddr_in);
    bzero(&client_addr, sizeof(client_addr));
    client_addr.sin_family = AF_INET;
    client_addr.sin_port =htons(client_port);
    client_addr.sin_addr.s_addr = inet_addr("127.0.0.1");

    while (true)
    {
        sendto(socket_fd,send_buf, strlen(send_buf),0,(struct sockaddr*)&client_addr,client_addr_len);
        int recv_len = recvfrom(socket_fd,recv_buf, sizeof(recv_buf),0,(struct sockaddr*)&client_addr,&client_addr_len);
        if (recv_len>0)
        {
            printf("%s\n",recv_buf);
        }

    }

    return 0;
}

客户端完整代码:

//
// Created by linux on 2021/2/9.
//

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>

int main(int argc,char *argv[])
{
    unsigned short port = 9000;
    int socket_fd = socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP);
    if (socket_fd<0)
    {
        perror("创建socket失败");
        exit(-1);

    }

    struct sockaddr_in server_addr;
    socklen_t server_addr_len = sizeof(server_addr);
    bzero(&server_addr, sizeof(server_addr));
    server_addr.sin_port=htons(port);
    server_addr.sin_addr.s_addr = inet_addr("127.0.0.1");
    server_addr.sin_family = AF_INET;

    bind(socket_fd,(struct sockaddr*)&server_addr, sizeof(server_addr));

    char recv_buf[512] = "";
    char send_buf[512] = "udp client data";
    unsigned short client_port = 8000;
    struct sockaddr_in client_addr;
    socklen_t client_addr_len = sizeof(sockaddr_in);
    bzero(&client_addr, sizeof(client_addr));
    client_addr.sin_family = AF_INET;
    client_addr.sin_port =htons(client_port);
    client_addr.sin_addr.s_addr = inet_addr("127.0.0.1");

    while (true)
    {
        sendto(socket_fd,send_buf, sizeof(send_buf),0,(struct sockaddr*)&client_addr,client_addr_len);
        int recv_len = recvfrom(socket_fd,recv_buf, sizeof(recv_buf),0,(struct sockaddr*)&server_addr, &server_addr_len);
        if (recv_len>0)
        {
            printf("接收的长度:%d,数据:%s\r\n",recv_len,recv_buf);
        }

    }
    close(socket_fd);
    return 0;
}

 

标签:UDP,socket,C++,server,fd,linux,include,recv,addr
来源: https://blog.csdn.net/fittec/article/details/113777313

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有