• TCP练习


    #include

    #define PORT 8888
    #define IP "192.168.124.18"

    int main(int argc, const char *argv[])
    {
        //创建流式套接字文件
        int sfd = socket(AF_INET,SOCK_STREAM,0);
        if(sfd < 0)
        {
            perror("socket");
            return -1;
        }
        printf("socket seccuss sfd = %d  __%d__\n",sfd,__LINE__);
        
        int reuse = 1;
        if(setsockopt(sfd,SOL_SOCKET,SO_REUSEADDR,&reuse,sizeof(reuse))<0)
        {
            perror("setsockopt");
            return -1;
        }
        //AF_INET
        struct sockaddr_in sin;
        sin.sin_family = AF_INET;
        sin.sin_port = htons(PORT);
        sin.sin_addr.s_addr = inet_addr(IP);

        //绑定服务器自身的地址信息
        if(bind(sfd,(struct sockaddr*)&sin,sizeof(sin)) < 0)
        {
            perror("bind");
            return -1;
        }
        printf("bind seccuss __%d__\n",__LINE__);
        //将套接字设置为被动监听状态
        if(listen(sfd,128) < 0)
        {
            perror("listen");
            return -1;
        }
        printf("listen seccuss __%d__\n",__LINE__);

        struct sockaddr_in cin;
        socklen_t addrlen = sizeof(cin);
        //获取链接成功的套接字
        int newfd = accept(sfd,(struct sockaddr*)&cin,&addrlen);
        if(newfd < 0)
        {
            perror("accept");
            return -1;
        }
        printf("[%s:%d] 客户端连接成功 newfd=%d __%d__\n",\
                inet_ntoa(cin.sin_addr),ntohs(cin.sin_port),newfd,__LINE__);
        

        char buf[128];
        ssize_t res;
        while(1)
        {
            bzero(buf,sizeof(buf));
            res = recv(newfd,buf,sizeof(buf),0);
            if(res < 0)
            {
                perror("recv");
                return -1;
            }
            else if(0 == res)
            {
                printf("[%s:%d] 客户端下线 __%d__\n",\
                        inet_ntoa(cin.sin_addr),ntohs(cin.sin_port),__LINE__);
                break;
            }
            printf("[%s:%d] 客户端连接成功 newfd=%d __%d__\n",\
                inet_ntoa(cin.sin_addr),ntohs(cin.sin_port),newfd,__LINE__);

        }
        close(newfd);
        close(sfd);

        return 0;
    }

  • 相关阅读:
    【译】为什么Kotlin Synthetics被废弃了?我们用什么来替代?
    嵌入式开发需要具备什么技能才能在这个行业躺平
    git压缩仓库
    Java8 新特性之Stream(二)-- Stream的中间操作
    性能测试学习-基本使用-元件组件介绍(二)
    MyBatis-plus框架使用
    手动证书管理与自动证书管理
    20天学习Spark(1)之Spark UI的使用
    Shader映射纹理编程
    springcloud和基础服务的搭建以及封装
  • 原文地址:https://blog.csdn.net/m0_73929315/article/details/138096244