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;
}

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

原文地址:https://www.cnblogs.com/George1994/p/6035574.html