您好,匿名用户
随意问技术百科期待您的加入

linux网络编程中如何判断服务器或者客户端已经关闭?

0 投票

是这样的,开了个服务器,开了个客户端连上,正常通信,客户端可以给服务器发数据。
这时候,关闭了服务器,然后客户端继续发数据并不会马上出错,可是再发一次客户端程序便自动退出了。
请问,为什么呢?
还有就是如果是客户端关闭,服务器往客户端发数据会不会出现这种情况?
(如果上面第二个问题答案是ture的话)怎么解决?(一个服务器不可能因为一个客户端的关闭而退出吧?)

#include <stdio.h>
#include <unistd.h>
#include <sys/socket.h>
#include <pthread.h>
#include <arpa/inet.h>
#include <errno.h>
#include <sys/types.h>
#include <stdlib.h>
#include <memory.h>

#define MAX 4096

int main(int argc, char **argv)
{
    int clientfd;
    if((clientfd = socket(AF_INET, SOCK_STREAM, 0)) == -1){
        printf("Error:%s\n", strerror(errno));
	exit(0);
    }

    struct sockaddr_in myaddr;
    memset(&myaddr, '0', sizeof(myaddr));
    myaddr.sin_family = AF_INET;
    myaddr.sin_port = htons(4444);
    myaddr.sin_addr.s_addr = htonl(INADDR_ANY);

    if( connect(clientfd, (struct sockaddr*)&myaddr, sizeof(myaddr)) < 0){
        printf("connect error: %s(errno: %d)\n",strerror(errno),errno);
	exit(0);
    }
	
    char sendline[MAX];
    while(1){
        printf("send msg to server: \n");
	fgets(sendline, 4096, stdin);
	if(send(clientfd, sendline, strlen(sendline), 0) <= 0)
	{
	    printf("send msg error: %s(errno: %d)", strerror(errno), errno);
	    exit(0);
	}
    }
    close(clientfd);
    exit(0);
    return 1;
}
用户头像 提问 2012年 12月1日 @ Poseidon 上等兵 (188 威望)
分享到:

1个回答

0 投票
 
最佳答案

威武我大linux怎么会因为这点小事就让进程挂掉,肯定是你没处理异常。。。。

用户头像 回复 2012年 12月1日 @ Volibear 上等兵 (259 威望)
选中 2012年 12月1日 @Poseidon
提一个问题:

相关问题

0 投票
1 回复 38 阅读
用户头像 提问 2012年 12月1日 @ Tristana 上等兵 (285 威望)
0 投票
0 回复 25 阅读
用户头像 提问 2013年 10月28日 @ mongodb 上等兵 (152 威望)
0 投票
1 回复 4 阅读
0 投票
1 回复 47 阅读
用户头像 提问 2012年 12月1日 @ Zyra 上等兵 (289 威望)

欢迎来到随意问技术百科, 这是一个面向专业开发者的IT问答网站,提供途径助开发者查找IT技术方案,解决程序bug和网站运维难题等。
温馨提示:本网站禁止用户发布与IT技术无关的、粗浅的、毫无意义的或者违法国家法规的等不合理内容,谢谢支持。

欢迎访问随意问技术百科,为了给您提供更好的服务,请及时反馈您的意见。
...