• Socket 错误总结


    错误

    因为并没有搞清楚accept函数的使用,所以导致不停的发送失败,同时还不知道错误在哪里,无意中看见errno这个库,可以记录错误的原因,才知道原因在于没有用客户端的套接字进行接收数据,而这个客户端的套接字可以通过accept函数返回,但是我什么都没有处理!

    看一下accept的函数吧

    int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
    

    accept函数的第一个参数为服务器的socket描述字,第二个参数为指向struct sockaddr *的指针,用于返回客户端的协议地址,第三个参数为协议地址的长度。如果accpet成功,那么其返回值是由内核自动生成的一个全新的描述字,代表与返回客户的TCP连接。

    所以我

    将其封装成两个重要的函数,分别是服务器接收到客户端,客户端连接服务端这两个函数,这两个实现了服务端和客户端的功能~

    /**
     * 返回接收的客户端
     */
    TCP* TCP::accept_client(Address& naddress) {
        this->tcreate();
        this->setAddress(naddress);
        this->bind();
        this->listen();
        SOCKET client = this->accept();
        
        TCP * _client = TCP::createInstance();
        _client->socket = client;
        _client->isClient = true;
        _client->isCreated = true;
        _client->isConnected = true;
        
        this->close();
        
        return _client;
    }
        
    /**
     * 连接服务器
     */
    void TCP::connect_server(Address& naddress) {
        this->tcreate();
        this->setAddress(naddress);
        this->connect();
        this->isClient = true;
        this->isCreated = true;
        this->isConnected = true;
    }
    
    

    关注公众号:数据结构与算法那些事儿,每天一篇数据结构与算法

  • 相关阅读:
    算法第四章上机实验报告
    算法第四章作业
    算法第三章上机实验报告
    算法第三章作业
    算法第二章上机实验报告
    算法第二章作业
    第五次c++作业总结
    第三次c++作业总结
    Linux上部署Java项目
    JVM类加载
  • 原文地址:https://www.cnblogs.com/George1994/p/6035574.html
Copyright © 2020-2023  润新知