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

一、概述

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

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

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

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程序例子小结

十八、      数据格式

上一篇:.net下redis和rabbitmq简单使用demo


下一篇:UNIX网络编程——TCP回射服务器/客户端程序