(嵌入式大作业)

上传人:xmg****18 文档编号:120436661 上传时间:2020-02-06 格式:DOC 页数:35 大小:65.65KB
返回 下载 相关 举报
(嵌入式大作业)_第1页
第1页 / 共35页
(嵌入式大作业)_第2页
第2页 / 共35页
(嵌入式大作业)_第3页
第3页 / 共35页
(嵌入式大作业)_第4页
第4页 / 共35页
(嵌入式大作业)_第5页
第5页 / 共35页
点击查看更多>>
资源描述

《(嵌入式大作业)》由会员分享,可在线阅读,更多相关《(嵌入式大作业)(35页珍藏版)》请在金锄头文库上搜索。

1、. . . . .嵌入式实验报告班级:14级移动一班 学号:1415925655 姓名:蒋浩 题目:一:实现三个客户端,分别简称客户端1,客户端2,客户端3.客户端1实现向服务器发送字符串“name”客户端2实现向服务器发送字符串“class”客户端3实现向服务器发送字符串“id”实现一个服务器程序,要求该服务器程序采用并发机制处理客户端发送过来的数据,具体要求如下:服务器收到客户端1发送的字符串“name”后,给客户端1回复“蒋浩”服务器收到客户端2发送的字符串“class”后,给客户端2回复“14级移动一班”服务器收到客户端2发送的字符串“id”后,给客户端2回复“1415925655”二

2、:三个客户端分别收到服务器回复的数据后完成以下操作:1:客户端1把服务器回复的数据“蒋浩”传递给客户端2,然后等待客户端2发送信号SIGUSR1,如果客户端1收到该信号,则客户端1打印“client over”字符串后结束2:客户端2收到客户端1的数据后,给客户端1发送信号SIGUSR1,然后,客户端2把字符串“蒋浩-14级移动一班1415925655”发送给客户端3,发送成功后结束。3:客户端3收到数据后把字符串“蒋浩-14级移动一班1415925655”写入到文件蒋浩-14级移动一班1415925655.txt文件中思路:(1):客户端与服务器间通信:程序通过socket编程实现,sock

3、et是在用户应用层和 TCP/IP协议通信层间的封装接口,简化操作,让用户通过socket来实现 2层间的操作,组织数据 。 服务器端先初始化Socket,然后与端口绑定(bind),对端口进行监听(listen),调用accept阻塞,等待客户端连接。 在这时如果有个客户端初始化一个Socket,然后连接服务器(connect),如果连接成功,这时客户端与服务器端的连接就建立了。 客户端发送数据请求,服务器端接收请求并处理请求,然后把回应数据发送给客户端,客户端读取数据,最后关闭连接,一次交互结束。 Linux网络通信通过套接字来进行编程的.程序通过socket和其它几个API的调用,会返回

4、一个 通讯的文件描述符也就是socket,我们可以将这个描述符看成普通的文件的描述符来操作,这就是linux的设备无关性的好处我们可以通过向描述符读写操作实现网络之间的数据交流.(2):客户端之间通信两个客户端之间通信使用有名管道通信,管道通信是一个进程打开写端,一个进程打开读端,然后才可以进行通信。如果只打开有名管道的一端系统则会阻塞打开进程,知道有另外一个进程打开该管道的另一端,当前进程继续执行;客户端1把服务器回复的数据名字传递给客户端2,等待接受客户端2发送的信号,如果客户端1收到信号则结束,客户端1是以只读方式打开管道,然后写入管道,客户端2以写的方式打开管道,接收到信息,然后客户端

5、2以kill命令发送信号kill(pid,SIGUSR1以告诉客户端1打印结束命令;客户端2收到客户端1的数据后,给客户端1发送“SIGUSR1”信号,然后,客户端2把字符串姓名和学号发送给客户端3,发送成功后结束,客户端2和3之间的通信仍然是管道通信,由于客户端3还要将收到的信息存入文本文件,所以客户端3以读写的方式打开管道进行通信open;最后客户端3将信息写入到文本文件使用:write原理:首先知道有三个客户端,一个服务器,所以服务器要采用并发式服务器才能接受多个客户端的连接请求(1) 服务器设计思路:命令行参数设计为了动态在命令行参数中输入端口,但命令行参数是字符串,端口是int型,所

6、以要转化一下Int main(int argc,char * argv)Main()函数设计一个结构体存储客户端的信息Struct userChar20 name;/客户端名称Char100 message;/客户端发送的消息Int fd;/客户端的套接字文件描述符由于要同时处理多个连接请求的服务器程序,该程序定义一个int client3;用来存储客户端连接的套接字描述符数组,初始化客户端连接描述符的值都为-1,代表空闲,当一个客户端的发送连接请求时,从client数组中找到一个值为-1(空闲)的来处理该客户端的连接请求While()Client0=accept();/找到一个空闲套接字Cl

7、ient0=1;/该套接字被占用/针对当前套接字创建一个线程,对当前套接字的消息进行处理 pthread_create(malloc(sizeof(pthread_t),NULL,(void*)(&message_deal),(void*)connfdi);线程体函数Void message_deal(int fd)While()recv(connectfd,recvbuf,1000,0)/接收客户端发来的send(connectfd,user_news,strlen(user_news)+1,0);/向客户端回复数据要实现以下服务器回复客户端消息的功能.服务器收到客户端1发送的字符串“nam

8、e”后,给客户端1回复“蒋浩”服务器收到客户端2发送的字符串“class”后,给客户端2回复“14级移动一班”服务器收到客户端2发送的字符串“id”后,给客户端2回复“1415925655”我采用的是服务器收到客户端发来的消息后用if()语句检查一下消息内容是什么?如果是”name” 回复 “蒋浩”等等.(2) 客户端设计思路:Main()函数在主函数中创建一个线程,主线程用来接收服务器回复的数据,新的线程用来向服务器发送数据/创建发送消息的线程,调用了发送消息的函数send_message pthread_create(&thread1,NULL,(void*)(&send_message)

9、,NULL); while(1)/把经服务器处理后的消息打印出来 recv(ld,buff,1000,0) 发送消息线程void send_message()While(1)send(ld,news,strlen(news)+1,0);遇到的困难:第一部分在完成的时候没有困难,就是客户端和服务器通信,在第二部分中开始不知道客户端进程之间怎么进行通信,为了实现两个毫不相关的进程间通信,上网查了一些方法方法一:有名管道方法二:消息队列1:服务器回复的数据“蒋浩”客户端2客户端12:发送SIGUSR1信号客户端33:把字符串“蒋浩-14级移动一班”发送给客户端3解决方法:1:客户端1-客户端2 采用

10、消息队列2:客户端2-客户端3采用有名管道在客户端2和客户端3之间加入有名管道进行通信int fd2; mode_t mode = O_NONBLOCK; / if(mkfifo(kkk,mode)0) perror(failed to mkfifo);exit(1); if( (fd2=open(kk,O_WRONLY) 0) perror(open); exit(1); char cc=夏秀娥-14级移动一班; write(fd2,cc,strlen(cc); close(fd2);if(signal(SIGUSR1, handler) = SIG_ERR)perror(signal fa

11、il);exit(-1);printf(向客户端2发送字符串:%sn,message.mtext);printf(等待 客户端2 进程发送信号! pid:%dn,message.mtype);sleep(30); if(fd3=open(kkk,O_RDONLY)0) printf(read: %sn,buf3); close(fd3); char buff1_v=蒋浩_14级移动1班_1415925655; int fd1_v;int len1_v=strlen(buff1_v);if(fd1_v=open(/root/蒋浩_1415925655.c,O_CREAT|O_RDWR)0)per

12、ror(open file1.c error);exit(1);int size1;if(size1=write(fd1_v,buff1_v,len1_v)0)perror(error1);exit(1);printf(已写入文件); printf(从 客户端1 接收消息为:%sn,message.mtext);printf(message.mtype:%dn,message.mtype);if(kill(int)message.mtype,SIGUSR1)=0)printf(客户端2进程发送SIGUSR1成功!n);客户端2 客户端3代码:Server:#include #include #include #include #include#include#include int PORT;struct user_messagechar name20;char message100;int connfd;/

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 教学/培训

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号