Linux Socket C/S 通信问题

发布于 2021-11-12 16:28:04 字数 162 浏览 758 评论 5

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

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

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

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

猫烠⑼条掵仅有一顆心 2021-11-16 21:33:15

无代码无真相

静谧 2021-11-16 13:39:11

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 errorn " );

   

}

挽清梦 2021-11-15 10:36:57

无代码无真相啊,fork()了么?

草莓味的萝莉 2021-11-15 02:09:53

server是accept啊,应该是你代码有问题

吃颗糖壮壮胆 2021-11-15 01:40:18

server端代码如何写的

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文