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 有偿求苍穹外卖环境配置
  • ¥15 代码在keil5里变成了这样怎么办啊,文件图像也变了,
  • ¥20 Ue4.26打包win64bit报错,如何解决?(语言-c++)
  • ¥15 clousx6整点报时指令怎么写
  • ¥30 远程帮我安装软件及库文件
  • ¥15 关于#自动化#的问题:如何通过电脑控制多相机同步拍照或摄影(相机或者摄影模组数量大于60),并将所有采集的照片或视频以一定编码规则存放至规定电脑文件夹内
  • ¥20 深信服vpn-2050这台设备如何配置才能成功联网?
  • ¥15 Arduino的wifi连接,如何关闭低功耗模式?
  • ¥15 Android studio 无法定位adb是什么问题?
  • ¥15 C#连接不上服务器,