Linux Socket C/S 通信问题

ChenQi 发布于 2011/08/17 00:37
阅读 588
收藏 0

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

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

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

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

以下是问题补充:

@ChenQi:我已经在代码分享区中粘帖代码里,附makefile。 求一起分析问题:) Good Luck and Have Fun. (2011/08/17 21:48)
@ChenQi:代码分类是C/C++常规编程---->C/C++网络编程 (2011/08/17 21:50)
加载中
0
u
ultravirs1
server端代码如何写的
0
王振威
王振威
server是accept啊,应该是你代码有问题
0
JamesJiangCHN
JamesJiangCHN
无代码无真相啊,fork()了么?
0
chen1922
chen1922

unp的例子,server端,看for()循环里面的

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
彭庆太
彭庆太
无代码无真相
返回顶部
顶部