通信应用软件课程设计线程同步服务器编程.doc

上传人:laozhun 文档编号:2397589 上传时间:2023-02-17 格式:DOC 页数:13 大小:332.50KB
返回 下载 相关 举报
通信应用软件课程设计线程同步服务器编程.doc_第1页
第1页 / 共13页
通信应用软件课程设计线程同步服务器编程.doc_第2页
第2页 / 共13页
通信应用软件课程设计线程同步服务器编程.doc_第3页
第3页 / 共13页
通信应用软件课程设计线程同步服务器编程.doc_第4页
第4页 / 共13页
通信应用软件课程设计线程同步服务器编程.doc_第5页
第5页 / 共13页
点击查看更多>>
资源描述

《通信应用软件课程设计线程同步服务器编程.doc》由会员分享,可在线阅读,更多相关《通信应用软件课程设计线程同步服务器编程.doc(13页珍藏版)》请在三一办公上搜索。

1、成绩 南京工程学院通信工程学院课程设计说明书(论文)题 目 线程同步服务器编程 课 程 名 称 通信应用软件课程设计 专 业 班 级 学 生 姓 名 学 号 设 计 地 点 指 导 教 师 设计起止时间:2011年12月5日至2011年12月9日目录1.问题描述11.1背景11.2 题目要求21.3 源代码运行方法及功能描述21.4关系模式2.方案图表设计32.1 UDP实验原理图形32.2 TCP实验原理图形42.3 互斥锁实验原理图形53.部分函数源代码63.1互斥锁73.2 TCP服务器73.3 TCP服务器添加时间显示时间94.结果数据处理95.结束语115.1课程设计心得116.参考

2、文献121.问题描述1.1背景 在多进程/多线程环境中,线程及进程同步是十分重要的。该技术解决了由并发而产生的同步问题,使得并发服务器能可靠的运行。进程是一个可拥有资源的基本单位,也是一个可独立调度和分配的基本单位。一个进程至少有一个线程。线程是进程内的独立执行实体和调度单位,创建线程比进程快10100倍。一个进程内的所有线程共享相同的内存空间、全局变量等信息。本次课程设计主要对线程同步、进程同步及进程间通信技术进行了实现。多线程并发服务器存除了存在线程安全性问题外,还存在线程同步性问题。线程在处理共享数据和进程资源时必须使用同步机制。 1.2 题目要求:1.在了解线程同步、进程同步及进程间通

3、信技术的基础上,把udpclient改成tcpclient,即把UDP改成TCP连接,其余功能要求不变。2.在客户端同时显示服务器的时间。3.在了解线程同步、进程同步及进程间通信技术的基础上,将字幕传输的顺序以倒序输出。1.3 源代码运行方法及功能描述:源程序运行方法:先运行thsync.c,然后打开一个终端启动服务器程序mproc_client.c,再打开一个新的终端运行客户程序(mproc_client.c)3次。thsync.c程序功能:1 服务器在特定的套接字地址上监听器,接受客户发来的信息并显示客户的IP地址及请求信息,同时显示处理客户请求的线程号。2 如果服务器接收到的客户信息为q

4、uit,则推出循环,并关闭套接字。 3 客户向服务器发信息,然后等待服务器响应,一旦收到服务发来的信息,则显示该信息,并关闭套接字。4 添加了getcurtime函数及其调用,在thysynserv、thysynser1程序基础上,服务器将时间信息发送出去,并在客户端上显示出来。1.4关系模式thrsync.c 服务器,显示客户端信息 mproc_client.c 客户端 getcurtime.c 服务器,在运行客户端时,同时显示服务器的时间信息。.方案图表设计根据所要实现的代码设计,建立线程之间的关系,进而实现连接通信。2.1 UDP实验原理图形UDP客户/服务器的套接字函数socket()

5、UDP服务器端bind()recvfrom()socket()UDP客户端sendto()recvfrom()sendto()close()close()阻塞直到接收到客户数据数据请求数据应答处理客户数据2.2 TCP实验原理图形TCP客户/服务器的套接字函数socket()TCP服务器端bind()socket()TCP客户端write()read()write()close()close()阻塞直到接收到客户数据数据请求数据响应处理请求关闭连接read()connect()建立连接TCP三次握手listen()listen()2.3 互斥锁实验原理图形互斥锁相关函数3.部分函数源代码1.2

6、.3.1互斥锁:3.2 TCP服务器1.创建TCP套接字if (listenfd = socket(AF_INET, SOCK_STREAM, 0) = -1) perror(Creating socket failed.);exit(1); 2.绑定TCP套接字int opt = SO_REUSEADDR;setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt);bzero(&server,sizeof(server);server.sin_family=AF_INET; server.sin_port=htons(PORT

7、); server.sin_addr.s_addr = htonl (INADDR_ANY); if (bind(sockfd, (struct sockaddr *)&server, sizeof(struct sockaddr) = -1) perror(Bind error.);exit(1); 3.监听函数if(listen(sockfd,BACKLOG) = -1) perror(listen() errorn); exit(1); 4.接受连接if (connectfd = accept(sockfd,(struct sockaddr *)&client,&sin_size)=-1

8、) perror(accept() errorn); exit(1); 3.3 TCP服务器添加时间显示时间1. 显示时间函数void getcurtime(char*curtime) time_t tm;time(&tm);snprintf(curtime,MAXDATASIZE,%sn,ctime(&tm);4.结果数据处理1、运行zscSecond.c与mproc_client.c后服务器结果如下: 2、同一台主机先运行服务器程序,然后运行客户程序mproc_client.c 3次后,结果如下: mproc_client.c 客户端分别显示:5.结束语5.1课程设计心得 一周的通信应用软

9、件课程设计,很快就结束了,这次的课程设计是关于线程同步的实验,加强了我们的动手、思考和解决问题的能力。在此期间我曾因为碰到错误不能改正而失落过,于是我询问了同学,并改正了过来。从开始时满腹激情到最后疲惫不堪的复杂心情,点点滴滴无不令我回味无长。在设计过程中遇到的问题可以说是有一定难度的,一开始我还是很有耐心的修改,后来一直改不出来,心里就有一点烦躁,但是我还是继续改,最终实现了进程间的通信。首先运行UDP服务器与客户端,因为老师已经给了代码,所以很快就运行成功。其次,将UDP服务器改为TCP服务器,在此过程中,把UDP数据报式套接字(ROCK_DGRAM)改成TCP流式套接字(SOCK_STR

10、EAM)。然后认真解读之前实验中的对于listenfd、sockfd、connectfd的运用并进行修改,在尝试过多次之后终于成功。接下来将服务器接收到的信息倒序显示并回复给客户端,在对于num与strlen(senfbuf)两参数进行理解并运用后也成功实现。最后一个问题就是添加了一个时间函数,在实验书实验9中有如下相关代码,void getcurtime(char*curtime)time_t tm;time(&tm);snprintf(curtime,MAXDATASIZE,%sn,ctime(&tm);所以这一步也实现得较为容易。 通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论是远远不够的,只有把所学的理论知识与实践相结合起来,从理论知识与实践相结合,从理论中得出结论,才是真正的知识,才能提高自己的事迹动手能力和独立思考的能力。在以后的学习中应加强锻练,增强个人综合素质。为以后的就业打下坚实的基础。6.参考文献1 通信应用软件设计实验指导书 南京工程学院 耿鹏 编2 Unix网络编程实用技术与实例分析 清华大学出版社 张炯 编

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 建筑/施工/环境 > 项目建议


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号