开发者社区> 问答> 正文

Linux Socket C/S 通信问题

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

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

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

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

展开
收起
a123456678 2016-06-12 16:43:33 2008 0
1 条回答
写回答
取消 提交回答
  • 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 " ); 
        
    } 
    2019-07-17 19:34:32
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Alibaba Cloud Linux 3 发布 立即下载
ECS系统指南之Linux系统诊断 立即下载
ECS运维指南 之 Linux系统诊断 立即下载