并发服务器的实现
来源:互联网 发布:手机透视物体软件 编辑:程序博客网 时间:2024/05/22 06:22
一、服务器端:tcpserv01.c
/************************************************************************* > File Name: tcpserv01.c > Author: zsj > Mail: 15623582731.com > Created Time: 2017年08月07日 星期一 16时17分55秒 ************************************************************************/#include<unp.h>int main(){int listenfd,connfd; //创建监听,连接套接字。pid_t childpid; //创建子进程。socklen_t clilen;//定义套接字的长度。struct sockaddr_in cliaddr,servaddr;//定义 客户 与服务器套接字listenfd=Socket(AF_INET,SOCK_STREAM,0);//监听套接字bzero(&servaddr,sizeof(servaddr));servaddr.sin_family=AF_INET;//IPV4协议servaddr.sin_addr.s_addr=htonl(INADDR_ANY);//返回32位的IP地址的网络序。servaddr.sin_port=htons(SERV_PORT); //返回16位端口号的网络序。Bind(listenfd,(SA*) &servaddr,sizeof(servaddr));//调用bind函数给服务器指定 一个监听接口,和通配地址Listen(listenfd,LISTENQ);//给监听套接字维护一个队列。for(; ;){clilen=sizeof(clilen);connfd=Accept(listenfd,(SA*)&cliaddr,&clilen);//返回一个已连接套接字,二三参数为客户端ip 接口,以及套接字地址长度。if((childpid=Fork())==0){ Close(listenfd);//子进程关闭监听套接字 str_echo(connfd); //在套接字上回射数据 exit(0);}Close(connfd);}} str_echo.c#include<unp.h>void str_echo(int sockfd){ssize_t n;char buf[MAXLINE];again:while((n=read(sockfd,buf,MAXLINE))>0)//read函数从套接字读取数据,{ Writen(sockfd,buf,n);//written函数把其中内容回射给客户。 if(n<0 && errno==EINTR) goto again; else if(n<0) { err_sys("read error"); }}}
二、客户端:tcpcli01.c
/************************************************************************* > File Name: tcpcli01.c > Author:zsj > Mail: 15623582731@163.com > Created Time: 2017年08月07日 星期一 16时40分23秒 ************************************************************************/#include<stdio.h>#include<unp.h>int main(int argc,char **argv){ int sockfd; struct sockaddr_in servaddr; if(argc!=2) err_quit("usag:tcpcli"); sockfd=Socket(AF_INET,SOCK_STREAM,0);//创建一个套接字 bzero(&servaddr,sizeof(servaddr)); servaddr.sin_family=AF_INET; servaddr.sin_port=htons(SERV_PORT);//取得16位端口号的网络序 Inet_pton(AF_INET,argv[1],&servaddr.sin_addr);//将输入的服务器IP地址转换成二进制。 Connect(sockfd,(SA*)&servaddr,sizeof(servaddr));//建立与服务器的连接。 str_cli(stdin,sockfd); exit(0);}/************************************************************************* > File Name: str_cli.c > Author: zsj > Mail: 15623582731@163.com > Created Time: 2017年08月07日 星期一 16时48分38秒 ************************************************************************/#include<stdio.h>#include<unp.h>void str_cli(FILE *fp,int sockfd){ char sendline[MAXLINE] ,recvline[MAXLINE]; while(Fgets(sendline,MAXLINE,fp)!=NULL) { Writen(sockfd,sendline,strlen(sendline)); if(Readline(sockfd,recvline,MAXLINE)==0) err_quit("str_cli"); Fputs(recvline,stdout); }}
三、程序测试:
zsj@zsj-virtual-machine:~/unp/code$ tcpserv01
[1] 17798
zsj@zsj-virtual-machine:~/unp/code$
netstat -a
激活Internet连接 (服务器和已建立连接的)
(1)打开 服务器后:9877是服务器端接口,处于监听状态。
tcp 0 0 :9877 :* LISTEN
(2)开启客户端与服务器建立连接
./tcpcli01 127.0.0.1
roto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 localhost:56121 localhost:9877 ESTABLISHED //客户端子进程套接字
tcp 0 0 localhost:9877 localhost:56121 ESTABLISHED //服务器子进程套接字
tcp 0 0 :9877 :* LISTEN //监听套接字
(3)键入一行,立即得到回射接着终止客户,立即执行
netstat -a
tcp 0 0 :9877 :* LISTEN
cp 0 0 localhost:56122 localhost:9877 TIME_WAIT
- 并发服务器的实现
- 几种并发服务器模型的实现
- 并发服务器的三种实现方式
- [Linux网络编程] 并发服务器的实现
- 并发服务器模型实现的方法
- 线程实现并发服务器
- Select实现并发服务器
- Linux并发服务器实现
- select实现并发服务器
- 并发服务器实现原理
- 自己实现一个简单的支持并发的Web服务器
- LINUX环境并发服务器的三种实现模型
- LINUX环境并发服务器的三种实现模型
- 带你实现一个简单的MyApacheTomcat,迷你并发服务器
- TCP套接字编程实现简单的并发服务器
- 并发服务器的实现(进程与线程)
- select实现tcp并发服务器的基本框架流程
- LINUX环境并发服务器的三种实现模型
- Qt的adjectSize()和update()
- 栈的应用 数组模拟 (指针)
- cmake 出错可能原因有CMakeCache
- 鼠标事件中event对象的坐标
- Spring Boot Web 开发注解篇
- 并发服务器的实现
- iBatis2学习笔记:SqlMap的配置总结(18条)
- MTK Android Driver:EINT
- Linux下查看Tomcat的控制台输出信息
- Android Json数据解析的深入理解和使用
- RESTful 架构风格概述
- HDU 6069 Counting Divisors (素数)
- leetcode--Search in Rotated Sorted Array II
- maven 跳过单元测试