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;
}
相关推荐
黄宝康16 分钟前
sublimetext 运行python程序
开发语言·python
m0_7482500326 分钟前
C++ 官方文档与标准
开发语言·c++
像风一样自由30 分钟前
android native 中的函数动态注册方式总结
android·java·服务器·安卓逆向分析·native函数动态注册·.so文件分析
zh_xuan41 分钟前
kotlin 类继承的语法2
开发语言·kotlin
oMcLin1 小时前
如何在 Ubuntu 22.04 LTS 上部署并优化 Magento 电商平台,提升高并发请求的响应速度与稳定性?
linux·运维·ubuntu
matlabgoodboy1 小时前
程序代做python代编程matlab定制代码编写C++代写plc设计java帮做
c++·python·matlab
Qinti_mm1 小时前
Linux io_uring:高性能异步I/O革命
linux·i/o·io_uring
优雅的38度1 小时前
linux环境下,使用docker安装apache kafka (docker-compose)
linux·架构
DYS_房东的猫1 小时前
《 C++ 零基础入门教程》第6章:模板与 STL 算法 —— 写一次,用万次
开发语言·c++·算法
诗意地回家1 小时前
淘宝小游戏反编译
开发语言·前端·javascript