UNIX网络编程---TCP客户/服务器程序示例(五)

一、概述

客户从标准输入读入一行文本,并写给服务器

服务器从网络输入读入这行文本,并回射给客户

客户从网络输入读入这行回射文本,并显示在标准输出上

 

 

二、TCP回射服务器程序:main函数

 

这里给了函数简单的main的实现

 

#define MAXLINE 1024
void str_echo(int);
int main(int argc,char *argv[])
{
	struct sockaddr_in serveraddr,cliaddr;
	char recvline[MAXLINE+1];
	int nread;
	int listenfd,connfd,connlen;
	int pid_t;
	connlen=1;
	memset(&cliaddr,0,sizeof(cliaddr));
	bzero(&serveraddr,sizeof(struct sockaddr_in));
	serveraddr.sin_port=htons(1222);
	serveraddr.sin_family=AF_INET;
	if(argc>=2){
		if(!inet_aton(argv[1],&serveraddr.sin_addr))
			printf("inet_aton error!\r\n");
			return -1;
	
	}
	serveraddr.sin_addr.s_addr=htonl(INADDR_ANY);
	if((listenfd=socket(AF_INET,SOCK_STREAM,0))<=0)
	{
		printf("socket error!\r\n");
		return 0;
		}
	bind(listenfd,(struct sockaddr*)&serveraddr,sizeof(serveraddr));
	listen(listenfd,5);
	for(;;)
	{
		connfd=accept(listenfd,(struct sockaddr*)&cliaddr,&connlen);
		if((pid_t=fork())==0)
			{
				close(listenfd);
				str_echo(connfd);
				exit(0);
				}
		close(connfd);
		}
	return 0;
	}

 三、TCP回射服务器程序:str_echo函数

 

 

void str_echo(int connfd)
{
	char recvline[MAXLINE+1];
	int nread;
	memset(recvline,0,sizeof(recvline));
	nread=read(connfd,recvline,sizeof(recvline));	
	if(nread<=0)
	{
		printf("read error!\r\n");
		exit(0);
		}
	nread=write(connfd,recvline,strlen(recvline));
	if(nread<=0)
	{
		printf("write error!\r\n");
		exit(0);
		}
	}

四、TCP回射客户程序:main函数

 

 

#define MAXLINE 1024
void str_cli(FILE *,int);
int main(int argc,char *argv[])
{
	struct sockaddr_in cliaddr;
	int nread,connfd;
	char recvline[MAXLINE+1];
	memset(recvline,0,sizeof(recvline));
	connfd=socket(AF_INET,SOCK_STREAM,0);
	if(connfd<=0)
	{
		printf("socket error!\r\n");
		return 0;
		}
	bzero(&cliaddr,sizeof(struct sockaddr_in));
	cliaddr.sin_family=AF_INET;
	cliaddr.sin_port=htons(1222);
	cliaddr.sin_addr.s_addr=inet_addr("192.168.5.163");
	if(connect(connfd,(struct sockaddr*)&cliaddr,sizeof(cliaddr)))
	{
		printf("connect error!\r\n");
		}
	str_cli(stdin,connfd);
	exit(0);

	}

五、TCP回射客户程序:str_cli函数

 

 

void str_cli(FILE *fp,int connfd)
{
	int nread;
	char recvline[MAXLINE+1];
	memset(recvline,0,sizeof(recvline));
	fgets(recvline,sizeof(recvline),fp);
	write(connfd,recvline,strlen(recvline));
	memset(recvline,0,sizeof(recvline));
	read(connfd,recvline,sizeof(recvline));
	fputs(recvline,stdout);
	}

六、正常启动

 

七、正常终止

八、Posix信号处理

九、处理sinchld信号

十、Wait和waitpid函数

十一、      Accept返回前连接中止

十二、      服务器进程终止

十三、      Sigpipe信号

十四、      服务器主机崩溃

十五、      服务器主机崩溃后重启

十六、      服务器主机关机

十七、      Tcp程序例子小结

十八、      数据格式

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值