c语言网络编程,connect server error: Connection refused

C语言 自己搭建的服务器和客户端 服务器在ubuntu上 客户端在开发板上
客户端连接服务器马上就被拒绝,报错 :connect server error: Connection refused

试了很多次,突然连上后
服务器一下出现了几十条 连接请求

server_line:90 nready:1
一个新的连接请求!!!

客户端代码:

//服务器IP
#define SERVER_ADDR "192.168.61.24"
//服务器端口号
#define SERVER_PORT 12000

```c
sockfd = socket(AF_INET,SOCK_STREAM,0);
    if(sockfd == -1)
    {
        std::perror("socket error");
        return ;
    }

    //连接服务器
    struct sockaddr_in serverAddr;
    serverAddr.sin_family = AF_INET;
    serverAddr.sin_addr.s_addr = inet_addr(SERVER_ADDR);
    serverAddr.sin_port = htons(SERVER_PORT);

    std::cout << "等待连接服务器..." <<std::endl;
    int retcon = connect(sockfd, (struct sockaddr*)&serverAddr,sizeof(serverAddr));
    if(retcon == -1)
    {
        std::perror("connect server error");
        return ;
    }
    std::cout << "连接服务器成功..." <<std::endl;

服务器代码:

//服务器IP
#define SERVER_ADDR "192.168.61.24"
//服务器端口号
#define SERVER_PORT 12000```

 //建立套接字
    int sockFd = socket(AF_INET,SOCK_STREAM,0);
    if(sockFd == -1)
    {
        perror("create sockFd errror");
        return NULL;
    }
    //设置端口复用
    int optval = 1;
    setsockopt(sockFd,SOL_SOCKET,SO_REUSEADDR,&optval,sizeof(optval));

    //绑定服务器IP和Prot
    struct sockaddr_in serverAddr;
    serverAddr.sin_family = AF_INET;
    serverAddr.sin_addr.s_addr = inet_addr(SERVER_ADDR);
    serverAddr.sin_port = htons(SERVER_PORT);

    bind(sockFd,(struct sockaddr*)&serverAddr,sizeof(serverAddr));

    //设置监听
    listen(sockFd,10);

    //初始化,存储连接上服务器的客户端 的套接字的数组
    for(int i=0; i<1024; i++)
    {
        clientFd[i] = -1;
    }

    //初始化监听集合
    FD_ZERO(&rset);
    FD_ZERO(&allConnect);
    //将监听套接字文件描述符加入监听集合
    FD_SET(sockFd,&allConnect);
    maxFd_c = sockFd;

    //建立监听时长结构体
    struct timeval timeout;
    printf("套接字建立完成\n");
    //使用多路复用监听,多个文件描述符的状态    
    while(1)
    {
        //保存监听集合
        rset = allConnect;

        timeout.tv_sec = 30;
        timeout.tv_usec = 0;

        //函数返回,集合中状态发生变化的文件描述符个数,同时会把状态未发生变化的文件描述符踢出集合
        int nready = select(maxFd_c+1,&rset,NULL,NULL,&timeout);
        if(nready == -1) //出错
        {
            if(EINTR == nready)//判断如果是信号干扰
            {
                continue;
            }
            perror("select error");
            break;
        }
        else if(nready == 0) //监听超时
        {
            printf("select timeout\r");
            continue;
        }

        //如果走到这里就证明集合中有文件描述符的状态发生了变化
        printf("server_line:%d nready:%d\n",__LINE__,nready);  //第九十行

        if(FD_ISSET(sockFd,&rset))
        {
            printf("一个新的连接请求!!!\n");
            //处理新连接上服务器的客户端
            add_task(poolHead,client_connect_handle,&sockFd);

            //如果监听集合中只剩一个状态发生了变化的文件描述符,则不用继续循环了
            if(--nready == 0)
            {
                continue;
            }
        }


不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^

这个问题说明你的服务器没有开启,或者服务器和客户端不在同一局域网下