zoukankan      html  css  js  c++  java
  • 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!
    ");
    			return -1;
    	
    	}
    	serveraddr.sin_addr.s_addr=htonl(INADDR_ANY);
    	if((listenfd=socket(AF_INET,SOCK_STREAM,0))<=0)
    	{
    		printf("socket error!
    ");
    		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!
    ");
    		exit(0);
    		}
    	nread=write(connfd,recvline,strlen(recvline));
    	if(nread<=0)
    	{
    		printf("write error!
    ");
    		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!
    ");
    		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!
    ");
    		}
    	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程序例子小结

    十八、      数据格式

  • 相关阅读:
    Exchange 2013与 Office Web Apps 整合
    SharePoint2013 以其他用户登录和修改AD域用户密码 功能
    sharepoint 2010 自定义页面布局
    sharepoint 2010 记录管理 对象模型
    SharePoint2010 对象模型 关联列表
    在SharePoint Server 2010中更改“我的网站”
    xenapp 6.5 客户端插件第一次安装总是跳到官网
    如何解决在Windows Server 2008 R2 上安装证书服务重启后出现 CertificationAuthority 91错误事件
    在Win7 Hyper-v虚拟机中挂接真实机的声卡
    win8 中如何删除 共享文件夹 用户名和密码
  • 原文地址:https://www.cnblogs.com/james1207/p/3329003.html
Copyright © 2011-2022 走看看