#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <errno.h>
#include <signal.h>
#include <string.h>
#include <fcntl.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#include <unistd.h>
int main(int argc ,char* argv[])
{
int i,get[100];
//server共享内存
key_t s_key;
if((s_key=ftok("server_shm",0))==-1)
{
printf("Create Key Error.\n");
exit(1);
}
int s_shmid=shmget(s_key,5*sizeof(int),IPC_CREAT);
if(s_shmid==-1)
{
printf("Create Share Memory Error-s.\n");
exit(1);
}
int *curr=shmat(s_shmid,0,0);
int *disp=shmat(s_shmid,0,0)+sizeof(int);
int *succ=shmat(s_shmid,0,0)+2*sizeof(int);
int *fail=shmat(s_shmid,0,0)+3*sizeof(int);
int *server=shmat(s_shmid,0,0)+4*sizeof(int);
*curr=*disp=*succ=*fail=0;
*server=-1;
//client共享内存
key_t b_key;
if((b_key=ftok("client_shm",0))==-1)
{
printf("Create Key Error.\n");
exit(1);
}
int b_shmid=shmget(b_key,200*sizeof(long),IPC_CREAT);
if(b_shmid==-1)
{
printf("Create Share Memory Error-c.\n");
exit(1);
}
long *b_stat=shmat(b_shmid,0,0);
long *numofclient=shmat(b_shmid,0,0)+200*sizeof(long);
*numofclient=0;
for(i=0;i<50;i++)
b_stat[2*i]=b_stat[2*i+1]=-1;
for(i=50;i<100;i++)
b_stat[2*i]=b_stat[2*i+1]=-1;
char ctl;
for(;;)
{
printf("\n------------------------------------------------------------------------\n");
printf("C - Create Server\nB - Create Browser\nK - Kill Server\nS - Check Stat.\nQ - Quit Manager\n");
printf("\nPlease Choose Operation:");
scanf("%c",&ctl);
switch(ctl)
{
case 'c':
case 'C':
{
if(*server!=-1)
printf("Server have already Existed.\n");
else if(fork()==0)//子进程
{
execlp("gnome-terminal","gnome-terminal","-x","Server", NULL);
printf("Server Started Error.\n");
exit(1);
}
else//父进程
;
break;
}
case 'b':
case 'B': {
if(*server==-1)
{
printf("Server Do Not Exist . Request Invalid . Start Server First.\n");
break;
}
int tocreate;
printf("Please Input the Number of Process You Wanna Create [1-%d] :",100-*numofclient);
scanf("%d",&tocreate);
if(tocreate>100-*numofclient||tocreate<0)
printf("Input Out Of Bounds!\n");
else
{
i=0;
int number=*numofclient;
for(i=number;i<tocreate+number;i++)
{
char p[100];
memset(p,'\0',10);
char t[100];
memset(t,'\0',10);
printf("请输入第%d个要请求的页面:",i+1);
scanf("%s",p);
printf("请输入第%d个文件的保存名:",i+1);
scanf("%s",t);
if((fork())==0)//子进程
{
execlp("gnome-terminal","gnome-terminal","-x","Client",p,t,NULL);
printf("Server Started Error.\n");
exit(1);
}
else//父进程
wait(NULL);
}
}
break;
}
case 'k'://Kill Process
case 'K':
{
if(*server==-1)
printf("Server Do Not Exist.\n");
else
{
kill(*server,SIGKILL);
printf("Server have been Killed.\n");
*server=-1;
}
break;
}
case 's'://Check Stat.
case 'S':
{
int num=0;
int sum=0;
if(*server==-1)
printf("Server DO Not Exist.\n");
printf("Server Stat:\n");
printf("Current Connect:%d\tDisposed Connect:%d\nSuccess Connect:%d\tFailed Connect:%d\n",*curr,*disp,*succ,*fail);
//when browser was created, numofclient++
if(*numofclient<=0)
printf("Browser Do Not Exist.\n");
else
{
sleep(1);
for(i=0;i<100;i++)
{
if(b_stat[2*i]>0)
{
printf("%ld\t",b_stat[2*i]);
if(b_stat[2*i+1]>=0)
{
num++;
sum+=b_stat[2*i+1];
}
}
}
sleep(2);
if(num==0)
printf("\nNo Transmisson Done.\n");
else
printf("\nAverage Time:%ld.\n",sum/num);
}
break;
}
case 'q':
case 'Q':
{
if(*server!=-1)
kill(*server,SIGKILL);
return 0;
}
default:
break;
}
}
return 0;
}
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
比较详细,不用修改,直接可用。 题目: 编写WEB客户端原型myWebBrowser和WEB服务器原型myWebServer及管理工具myManager,要求满足以下条件: 功能需求 1. myWebBrowser a) 利用HTTP的GET消息,能从任何WEB服务器中获取指定WEB页面; b) 获取WEB页面后,能将页面保存为本地文件index.html; c) 能显示index.html文件源码; d) 能调用Linux系统中的Web浏览器(如mozilla)正确显示index.html页面。 2. myWebServer a) 能接受WEB浏览器的连接请求; b) 支持HTTP的GET消息,并正确处理该消息; c) 只支持静态网页请求(即只支持html页面请求); d) 支持并发服务; 3. myManager a) 可以启停myWebServer b) 可以同时启动指定数量的myWebBrowser c) 可以获取myWebServer和myWebBrowser进程的统计数据 i. myWebServer:当前连接数、已处理连接数、成功请求数、失败请求数等 ii. myWebBrowser: 活动进程id、每个请求的平均响应时间 其他需求 分析比较myWebServer与其他WEB服务器(如Tomcat)的性能。 参考资料 1. 教材CH9 2. 《Tomcat安装使用手册》 3. 《Wireshark安装使用手册》
资源推荐
资源详情
资源评论
收起资源包目录
BS代码.rar (10个子文件)
BS代码
client.c 3KB
Client 8KB
server.c 3KB
server_shm 1B
Server 8KB
Manager 8KB
client_shm 1B
temp.html 156B
hello.html 156B
manager.c 4KB
共 10 条
- 1
caseone2009
- 粉丝: 12
- 资源: 7
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
前往页