版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第第页lyr^ubuntLi:gccDesktop/fork2*clyr@ubuntu:./a,outfork!/nlantheparentprocess,myprocessidisSB04/nlyrgubuntu:-$fork!/nlamthechildprocess,myprocessidis100S/n四、实验结果、分析和结论通过此次实验我对在Linux中的进程调控有了一些认识,并且基本掌握了进程调控的一些方法,只是学习还很浅,需要不断深入加强。上机五:Linux进程及网络开发2一、实验目的及要求开发一个Linux命令行基于C/S结构的TCP/IP的即时聊天程序。二、实验环境和相关软件及版本Windows7、VMware、ubuntu三、实验内容及步骤1、客户端设计流程:
2、服务端设计流程:3、编写服务端收发消息程序server,c:#include<stdio.h>数据结构#incIude<stdIib.h>sockaddrinincIude<sys/types.h>//数据类型定义incIude<sys/stat.h>incIude<netinet/in.h>//定义incIude<sys/socket.h>//提供socket函数及数据结构incIude<string.h>incIude<unistd.h>
#include<signal.h>#include<sys/ipc.h>#include<errno.h>#include<sys/shm.h>#include<time.h>#definePERMS_IRUSR|S_IWUSRdefineMYPORT3490//宏定义定义通信端口defineBACKLOG10//宏定义,定义服务程序可以连接的最大客户数量defineWELCOME"|Welcometothechatroom!|"//宏定义,当客户端连接服务端时,想客户发送此欢迎字符串//转换函数,将int类型转换成char*类型voiditoa(inti,char*string){intpower,j;j=i;for(power=1;j>=10;j/=10)power*=10;for(;power>0;power/=10){*string++='0'+i/power;i%=power;}*string='\0';}//得到当前系统时间voidget_cur_time(char*time_str){time_ttimep;structtm*p_curtime;char*time_tmp;time_tmp=(char*)malloc(2);memset(time_tmp,0,2);memset(time_str,0,20);time(&timep);p_curtimetime(&timep);p_curtime=localtime(&tistrcat(time_str,"(");itoa(p_curtime->tm_hour,time_tmp);strcat(time_str,time_tmp);strcat(time_str,":");itoa(p_curtime->tm_min,time_tmp);strcat(time_str,time_tmp);strcat(time_str,":");itoa(p_curtime->tm_sec,time_tmp);strcat(time_str,time_tmp);strcat(time_str,")");free(time_tmp);}//创建共享存储区key_tshm_create(){key_tshmid;//shmid=shmget(IPC_PRIVATE,1024,PERM);if((shmid=shmget(IPC_PRIVATE,1024,PERM))==-1){fprintf(stderr,"CreateShareMemoryError:%s\n\a",strerror(errno));exit(1);}returnshmid;}//端口绑定函数,创建套接字,并绑定到指定端口intbindPort(unsignedshortintport){intsockfd;structsockaddr_inmy_addr;sockfd=socket(AF_INET,SOCK_STREAM,0);//创建基于流套接字my_addr.sin_family=AF_INET;//IPv4协议族my_addr.sin_port=htons(port);//端口转换my_addr.sin_addr.s_addr=INADDR_ANY;bzero(&(my_addr.sin_zero),0);if(bind(sockfd,(structsockaddr*)&my_addr,sizeof(structsockaddr))==-1){perror("bind");exit(1);}printf("bingsuccess!\n");returnsockfd;}intmain(intargc,char*argv[]){intsockfd,clientfd,sin_size,recvbytes;//定义监听套接字、客户套接字pid_tpid,ppid;//定义父子线程标记变量char*buf,*r_addr,*w_addr,*temp,*time_str;//="\0";//定义临时存储区structsockaddr_intheir_addr;//定义地址结构key_tshmid;shmid=shm_create();//创建共享存储区temp=(char*)malloc(255);time_str=(char*)malloc(20);sockfd=bindPort(MYPORT);//绑定端口while(1){if(listen(sockfd,BACKLOG)==-1)//在指定端口上监听{perror("listen");exit(1);}printf("listening\n");if((clientfd=accept(sockfd,(structsockaddr*)&their_addr,&sin_size))==-1)//接收客户端连接{perror("accept");exit(1);}printf("acceptfrom:%d\n",inet_ntoa(their_addr.sin_addr));send(clientfd,WELCOME,strlen(WELCOME),0);//发送问候信息buf=(char*)malloc(255);ppid=fork();//创建子进程if(ppid==0){//printf("ppid=0\n");pid=fork();//创建子进程while(1){if(pid>0){//父进程用于接收信息memset(buf,0,255);//printf("recv\n");//sleep(1);if((recvbyt
esrecv(clientfd,buf,255,0))<=strcpy(esrecv(clientfd,buf,255,0))<=strcpy({perror("recv1");close(clientfd);raise(SIGKILL);exit(1);}//writebuf'sdatatosharememoryw_addr=shmat(shmid,0,0);memset(w_addr,'\0',1024);strncpy(w_addr,buf,1024);get_cur_time(time_str);strcat(buf,time_str);printf("%s\n",buf);}elseif(pid==0){//子进程用于发送信息//scanf("%s",buf);sleep(1);r_addr=shmat(shmid,0,0);//printf("%s\n",r_addr);//printf("cmp:%d\n",strcmp(temp,r_addr));if(strcmp(temp,r_addr)!=0){temp,r_addr);get_cur_time(time_str);strcat(r_addr,time_str);//printf("discriptor:%d\n",clientfd);//if(send(clientfd,buf,strlen(buf),0)==-1)if(send(clientfd,r_addr,strlen(r_addr),0)==-1){perror("send");}memset(r_addr,'\0',1024);strcpy(r_addr,temp);}}elseperror("fork");}}}printf("\n");free(buf);close(sockfd);close(clientfd);return0;}Terminal你——ubuntu:Torunaconmandasadntnistratcjrtuser"root'1),use11sudo<conmaftdj*.虹4See"mansudQ_roat,TfordetatlSxlyraubLjntu;-$catDeakt&p/flverc#include<stdio.h>#lnclude<stdltb.h>#include<sys/types.h>//数堀类型定义HEfstnclude<sys/stat.h>_屋"tnclud^nettnet/tnrh>〃定义数据结构sockaddr_in____#1ncLude<sys/socket.h>“提供EoukEt函数及数据结构|9hwlncludecstring.h>■■1^tnclude<unIstd.h>#include<signal.h>力#include<sys/ipc.h>£Slncludecerrno.h>wlncludecsys/shn+h>Afafftnclude<ttne.h>五,SdefinePERMSIRJSR|SIbfUSR_・・Sdeftne忖¥POR-349白〃宏定义定义通信虎口一SdefintBACKLOG19〃法定理,定义服务程序可以连接的最大客户数量并definewelcome"Iwelconetothechat「oom!|F〃困定义,当2客户端连接服莞端得,想客户发送此欢迎字符串4、编写客户端收发消息程序client.c#include<stdio.h>#include<netinet/in.h>//定义数据结构sockaddr_in#include<sys/socket.h>〃提供socket函数及数据结构#include<sys/types.h>//数据类型定义#include<string.h>#include<stdlib.h>#include<netdb.h>#include<unistd.h>#include<signal.h>#include<time.h>intmain(intargc,char*argv[]){structsockaddr_inclientaddr;//定义地址结构pid_tpid;intclientfd,sendbytes,recvbytes;//定义客户端套接字structhostent*host;char*buf,*buf_r;if(argc<4){printf("usage:\n");printf("%shostportname\n",argv[0]);exit(1);}host=gethostbyname(argv[1]);if((clientfd=socket(AF_INET,SOCK_STREAM,0))==-1)//创建客户端套接字{perror("socket\n");exit(1);}//绑定客户端套接字clientaddr.sin_family=AF_INET;clientaddr.sin_port=htons((uint16_t)atoi(argv[2]));clientaddr.sin_addr=*((structin_addr*)host->h_addr);sockabzero(&(clientaddr.sin_zero),0);sockaif(connect(clientfd,(structsockaddr*)&clientaddr,sizeof(structddr))==-1)//连接服务端{perror("connect\n");exit(1);}buf=(char*)malloc(120);memset(buf,0,120);buf_r=(char*)malloc(100);if(recv(clientfd,buf,100,0)==-1){perror("recv:");exit(1);}printf("\n%s\n",buf);pid=fork();//创建子进程while(1){if(pid>0){//父进程用于发送信息//get_cur_time(time_str);strcpy(buf,argv[3]);strcat(buf,":");memset(buf_r,0,100);//gets(buf_r);fgets(buf_r,100,stdin);strncat(buf,buf_r,strlen(buf_r)-1);//strcat(buf,time_str);//printf("%s\n",buf);if((sendbytes=send(clientfd,buf,strlen(buf),0))==-1){perror("send\n");exit(1);}}elseif(pid==0){//子进程用于接收信息memset(buf,0,100);if(recv(clientfd,buf,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 房屋维修监管协议书
- 房屋车库买卖协议书
- 房屋转让卖买协议书
- 房屋销售佣金协议书
- 房车使用租赁协议书
- 房顶喷漆安全协议书
- 手工教学合同协议书
- 手机保障服务协议书
- 手机类采购合同范本
- 打字复印协议书范本
- 2025年洛阳市城乡一体化示范区招聘城市管理辅助人员130名笔试考试参考试题及答案解析
- 经皮冠状动脉介入治疗术后口服抗栓策略优化专家共识2026
- 2025年垫江县辅警协警招聘考试真题及参考答案详解1套
- 掘进队长考试题库及答案
- (2025)全国小学生“学宪法、讲宪法”活动知识竞赛题库及答案
- 培训机构学管师培训
- 企业所得税汇算清缴申报表电子表格版(带公式-自动计算)
- 齐鲁工业大学-大学物理(下)期末复习总结
- 陶瓷太阳能集热板
- 宫角妊娠Microsoft-PowerPoint-演示文稿
- 提前介入办事流程附件
评论
0/150
提交评论