Linux Socket C/S 通信问题-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

Linux Socket C/S 通信问题

2016-06-12 16:43:33 1763 1

Linux下利用socket的系统调用,创建C/S模型的通信。

利用read和write对建立链接的socket进行读写,从而通信。

问题是,在server和client的通信中,如果client退出了,那么server就跟着退出了。

这是怎么回事?怎么解决呢?

取消 提交回答
全部回答(1)
  • a123456678
    2019-07-17 19:34:32
    main(int argc, char **argv )
    
    { 
        int listenfd, connfd; 
        pid_t childpid; 
    
        struct sockaddr_in servaddr, cliaddr; 
        socklen_t clilen; 
    
        listenfd = Socket( AF_INET, SOCK_STREAM, 0 ); 
    
        bzero( &servaddr, sizeof( servaddr ) ); 
    
        servaddr.sin_family = AF_INET; 
        servaddr.sin_addr.s_addr = htonl( INADDR_ANY ); 
        servaddr.sin_port = htons( SERV_PORT ); 
    
        Bind( listenfd, ( struct sockaddr * ) &servaddr, sizeof( servaddr ) ); 
    
        Listen( listenfd, 10 ); 
    
        for ( ; ; ) { 
            clilen = sizeof( cliaddr ); 
            
            connfd = Accept( listenfd, ( struct sockaddr * ) &cliaddr, &clilen ); 
            if ( ( childpid = Fork( ) ) == 0 ) { 
                close( listenfd ); 
                str_echo( connfd ); 
                exit( 0 ); 
            } 
            close( connfd ); 
        } 
    } 
    
    void str_echo(int sockfd ) 
    { 
        ssize_t n; 
        char buf[MAXLINE]; 
    
    again: 
        while ( ( n = read( sockfd,buf, MAXLINE ) ) > 0 ) { 
            write( sockfd, buf, n ); 
        } 
        if ( n < 0 && errno == EINTR ) 
            goto again; 
        else if ( n < 0 ) 
            printf( "str_echo error\n " ); 
        
    } 
    0 0
相关问答

1

回答

Linux基本命令中如何对命令与文件补全?

2022-04-02 14:44:54 305浏览量 回答数 1

1

回答

Linux基本命令中怎么样对历史命令(环境变量)配置文件/etc/profile?

2022-04-02 14:43:37 341浏览量 回答数 1

1

回答

Linux基本命令中 命令历史相关环境变量有哪些内容?

2022-04-02 14:38:41 301浏览量 回答数 1

1

回答

Linux基本命令中 history命令用于哪些内容?

2022-04-02 14:34:46 179浏览量 回答数 1

1

回答

Linux基本命令中 history命令如何使用 HISTIGNORE 忽略历史中的特定命令?

2022-04-02 14:25:29 294浏览量 回答数 1

1

回答

Linux基本命令中 history命令如何使用 HISTSIZE 禁用 history?

2022-04-02 14:25:28 247浏览量 回答数 1

1

回答

Linux系统的ln 命令有什么用呢?

2021-12-01 21:00:48 143浏览量 回答数 1

1

回答

Linux系统的top命令有什么用呢?

2021-12-01 21:02:12 127浏览量 回答数 1

1

回答

Linux系统的ps 命令有什么用呢?

2021-12-01 21:02:30 94浏览量 回答数 1

1

回答

Linux系统的-e /-A命令有什么用呢?

2021-12-01 21:02:50 137浏览量 回答数 1
+关注
文章
问答
问答排行榜
最热
最新
相关电子书
更多
从 Linux 系统内核层面来解决实际问题的实战经验
立即下载
ECS系统指南之Linux系统诊断
立即下载
Decian GNU/Linux安全合规之路
立即下载