DongGu. 2022-05-28 19:29 采纳率: 66.7%
浏览 15
已结题

该代码怎么在关闭服务器端时候不出现bind error: Address already in use错误

该代码怎么在关闭服务器端时候不出现bind error: Address already in use错误

#include<ctype.h>
#include<unistd.h>
#include<errno.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <arpa/inet.h>
#include<pthread.h>
#define SERV_PORT 9527

void sys_err(const char* str) {
    perror(str);
    exit(1);
}

int main(int argc, char* argv[]) {

    int lfd, cfd;

    struct sockaddr_in serv_addr, client_addr;
    socklen_t client_len = sizeof(client_addr);

    serv_addr.sin_family = AF_INET;
    serv_addr.sin_port = htons(SERV_PORT);
    serv_addr.sin_addr.s_addr = htonl(INADDR_ANY);

    lfd = socket(AF_INET, SOCK_STREAM, 0);
    if (lfd == -1) {
        sys_err("socket error");
    }

    int isbind = bind(lfd, (struct sockaddr*)&serv_addr, sizeof(serv_addr));
    if (isbind == -1) {
        sys_err("bind error");
    }

    int islisten = listen(lfd, 10);
    if (islisten == -1) {
        sys_err("listen error");
    }
    
    char buf[BUFSIZ];
    static int t = 1;
    while (1) {

        printf("\tclient_len: %d\n", client_len);
        cfd = accept(lfd, (struct sockaddr*)&client_addr, &client_len);
        printf("\tclient_len: %d\n", client_len);

        printf("%s %d\n", inet_ntoa(client_addr.sin_addr), client_addr.sin_port);


        if (cfd == -1) {
            sys_err("accept error");
        }
        while (1) 
        {
            int ret = read(cfd, buf, sizeof(buf));

            for (int i = 0; i < ret; i++)     buf[i] = toupper(buf[i]);

            write(cfd, buf, ret);
            write(STDOUT_FILENO, buf, ret);

            sleep(t);
            t++;

            break;
        }
        close(cfd);
    }
    close(lfd);
    return 0;
}
  • 写回答

1条回答 默认 最新

  • 赵4老师 2022-05-28 22:18
    关注
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 6月7日
  • 已采纳回答 5月30日
  • 创建了问题 5月28日

悬赏问题

  • ¥15 任务A:大数据平台搭建(容器环境)怎么做呢?
  • ¥15 r语言神经网络自变量重要性分析
  • ¥15 基于双目测规则物体尺寸
  • ¥15 wegame打不开英雄联盟
  • ¥15 公司的电脑,win10系统自带远程协助,访问家里个人电脑,提示出现内部错误,各种常规的设置都已经尝试,感觉公司对此功能进行了限制(我们是集团公司)
  • ¥15 救!ENVI5.6深度学习初始化模型报错怎么办?
  • ¥30 eclipse开启服务后,网页无法打开
  • ¥30 雷达辐射源信号参考模型
  • ¥15 html+css+js如何实现这样子的效果?
  • ¥15 STM32单片机自主设计