Udp 和 Tcp socket的一般编程套路(笔记)

一. Udp套路:

第一步:创建套接字

第二步:配置服务器地址信息

第三步:绑定套接字

cpp 复制代码
void init()
    {
        _socketfd = socket(AF_INET,SOCK_DGRAM,0);//第一步 创建套接字
        //AF_INET:使用IPv4协议
        //SOCK_DGRAM就是数据报
        // UDP - 不需要建立连接
        // 直接发送数据,无需connect()
        struct sockaddr_in addr;//第二步 配置服务器地址信息
        memset(&addr,0,sizeof(addr));
        addr.sin_family = AF_INET;
        addr.sin_port = htons(_port);      
        addr.sin_addr.s_addr = INADDR_ANY;
        socklen_t size = sizeof(addr);
        if(bind(_socketfd,(struct sockaddr*)&addr,size) < 0)//第三步 绑定套接字
        {
            LOG(level::FATAL)<<"bind false";
            exit(1);
        }
        LOG(level::INFO)<<"bind success";
        
    }

就可以运行了

cpp 复制代码
 void start()
    {
        while(1)
        {
            char buff[512];
            struct sockaddr_in addrin;
            socklen_t sizein = sizeof(addrin);
            ssize_t n = recvfrom(_socketfd,buff,sizeof(buff)-1,0,(struct sockaddr*)&addrin,&sizein);//从套接字中获取信息
            if(n > 0)
            {
                buff[n] = 0;
                LOG(level::DEBUG)<<buff;
                
                std::string message;
                message = "server say# ";
                message += buff;
                ssize_t m = sendto(_socketfd,message.c_str(),message.size(),0,(struct sockaddr*)&addrin, sizein);//从套接字中发送信息
            }
            
        }
    }

二.Tcp套路:

  1. 创建Socket

  2. 绑定地址

  3. 开始监听

cpp 复制代码
    void Init()
    {
        _listenfd = socket(AF_INET,SOCK_STREAM,0);//第一步 获取监听套接字
        //SOCK_STREAM 数据流
        if(_listenfd < 0)
        {
            LOG(level::FATAL)<<"Socket false";
            exit(SOCKER_ERR);
        }

        LOG(level::INFO)<<"socket success "<<_listenfd;
        Inetaddr saddr(_port);
        int n = bind(_listenfd,(const struct sockaddr*)&saddr.Getaddr(),sizeof(saddr.Getaddr()));//第二步 绑定服务端
        if(n == -1)
        {
            LOG(level::FATAL)<<"bind false";
            exit(BIND_ERR);
        }

        if(listen(_listenfd,defbacklog) < 0)//第三步 监听
        {
            LOG(level::FATAL)<<"listen false";
            exit(LISTEN_ERR);
        }

    }
  1. accept 从监听listen fd获取远端的套接字
cpp 复制代码
         while(_Isrunning)
        {
            struct sockaddr_in peer;//建立远端来接受远端信息
            socklen_t sz = sizeof(peer);
            int sfd = accept(_listenfd,(sockaddr*)&peer,&sz);
            //从监听fd获取远端的套接字
            if(sfd < 0)
            {
                LOG(level::ERROR)<<"accept false";
                exit(ACCEPT_ERR);
            }
            LOG(level::DEBUG)<<"accept success "<<sfd;
            Inetaddr local(peer);
            //下面是我自己线程的执行,不用理
            ThreadData* thdata = new ThreadData(sfd,local,this);
            pthread_t th1;
            pthread_create(&th1,nullptr,Routine,thdata);
        }
相关推荐
小诗懂技术1 小时前
【网络通信UDP】基础 进程间不同主机的通信
运维·服务器·网络
DM今天肝到几点?3 小时前
AI 安全进入「攻防同频」:Gemini 3.8 Flash Cyber 上线、Astra 触及关键级、HiddenLayer 融资 1 亿美元
网络·人工智能·深度学习·安全·语言模型·开源·知识图谱
幼儿园蛋小黑3 小时前
TCP 并发:从原理到高并发实践
网络·网络协议·tcp/ip
我爱cope5 小时前
【计算机网络 | 网络层11:ICMP 协议:Ping 和 Traceroute 的底层原理】
网络·学习·计算机网络
Latticy6 小时前
vulnhub系列靶机-Photographer
网络·网络安全·内网渗透·内网
爱浦路 IPLOOK6 小时前
矿山无人化作业5G专网方案:企业专网核心网络选型分析
网络·分布式·科技·5g·信息与通信
制冷技术咨询与服务6 小时前
某纯电牵引车的CAN网络3
网络·某纯电牵引车的can网络2
驭渊的小故事7 小时前
网络原理04(http协议详细解析3)(2000详细解析HTTPS的工作原理)
网络·网络协议·http
额额额对了8 小时前
Linux 进程间通信(IPC)核心机制:消息队列、共享内存与信号量详解
linux·网络·网络协议
IPdodo_8 小时前
2026年爬虫代理 IP 选择指南:从可用率、延迟到成本验收
网络协议·tcp/ip·scrapy·http·https·beautifulsoup·httpx