LinuxC++的UDP服务器和客户端通信

服务器

cpp 复制代码
#include<sys/socket.h>
#include<stdio.h>
#include<arpa/inet.h>
#include<unistd.h>
#include<string.h>
int main()
{
    int ret;
    int sfd=socket(AF_INET,SOCK_DGRAM,0);
    if(sfd==-1)perror("socket error");
    struct sockaddr_in saddr;
    saddr.sin_port=htons(8888);
    saddr.sin_family=AF_INET;
    saddr.sin_addr.s_addr=INADDR_ANY;
    ret=bind(sfd,(struct sockaddr*)&saddr,sizeof(saddr));
    if(ret==-1)perror("bind error");
    char buffer[1024]={'\0'};
    while(true)
    {
        struct sockaddr_in caddr;
        int caddrlen=sizeof(caddr);
        ret=recvfrom(sfd,buffer,1024,0,(struct sockaddr*)&caddr,(socklen_t*)&caddrlen);
        if(ret==-1)
        {
            perror("recvfrom error");
            break;
        }
        else if(ret==0)
        {
            printf("连接断开\n");
            break;
        }
        else
        {
            char ip[30]={'\0'};
            inet_ntop(AF_INET,&caddr.sin_addr.s_addr,ip,sizeof(ip));
            printf("从客户端%s:%d收到数据:%s\n",ip,htons(caddr.sin_port),buffer);
            char sendbuf[50]={'\0'};
            sprintf(sendbuf,"server recive your data:%s",buffer);
            ret=sendto(sfd,sendbuf,sizeof(sendbuf),0,(struct sockaddr*)&caddr,caddrlen);
            if(ret==-1)
            {
                perror("sendto error");
                break;
            }
        }
        memset(buffer,0,1024);
    }
    close(sfd);
    return 0;
}

客户端

cpp 复制代码
#include<sys/socket.h>
#include<stdio.h>
#include<arpa/inet.h>
#include<unistd.h>
#include<string.h>
int main()
{
    int ret;
    int cfd=socket(AF_INET,SOCK_DGRAM,0);
    if(cfd==-1)perror("socket error");
    struct sockaddr_in caddr;
    caddr.sin_port=htons(8888);
    caddr.sin_family=AF_INET;
    ret=inet_pton(AF_INET,"192.168.101.231",&caddr.sin_addr.s_addr);
    if(ret==-1)perror("inet_pton error");
    char buffer[1024]={'\0'};
    int i=0;
    while(true)
    {
        char sendbuf[50]={'\0'};
        sprintf(sendbuf,"this is client:hello world:%d",i);
        ret=sendto(cfd,sendbuf,sizeof(sendbuf),0,(struct sockaddr*)&caddr,sizeof(caddr));
        if(ret==-1)
        {
            perror("sendto error");
            break;
        }
        ret=recvfrom(cfd,buffer,1024,0,NULL,NULL);
        if(ret==-1)
        {
            perror("recvfrom error");
            break;
        }
        else if(ret==0)
        {
            printf("连接断开\n");
            break;
        }
        else
        {
            printf("收到了数据:%s\n",buffer);
        }
        memset(buffer,0,1024);
        memset(sendbuf,0,50);
        sleep(1);
    }
    close(cfd);
    return 0;
}
相关推荐
---学无止境---1 分钟前
Linux中slab缓存初始化kmem_cache_init函数和定时回收函数的实现
linux
枫叶丹43 分钟前
【Qt开发】多元素类控件(二)-> QTableWidget
开发语言·qt
bin91534 分钟前
当AI开始‘映射‘用户数据:初级Python开发者的创意‘高阶函数‘如何避免被‘化简‘?—— 老码农的函数式幽默
开发语言·人工智能·python·工具·ai工具
草莓熊Lotso7 分钟前
Linux 进阶指令实操指南:文件查看、时间管理、搜索压缩全场景覆盖(附高频案例)
linux·运维·服务器
Cx330❀7 分钟前
《Linux进阶指令实操指南》:文件查看、时间管理、搜索压缩全覆盖(附高频案例)
linux·运维·服务器
怀揣小梦想25 分钟前
跟着Carl学算法--哈希表
数据结构·c++·笔记·算法·哈希算法·散列表
Nebula_g26 分钟前
Java哈希表入门详解(Hash)
java·开发语言·学习·算法·哈希算法·初学者
努力努力再努力wz28 分钟前
【C++进阶系列】:万字详解unordered_set和unordered_map,带你手搓一个哈希表!(附模拟实现unordered_set和unordered_map的源码)
java·linux·开发语言·数据结构·数据库·c++·散列表
加油=^_^=29 分钟前
【C++】哈希表
数据结构·c++·散列表