计算机网络课程设计_第1页
计算机网络课程设计_第2页
计算机网络课程设计_第3页
计算机网络课程设计_第4页
计算机网络课程设计_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

计算机网络 课程设计报告 网络聊天程序的设计与实现网络聊天程序的设计与实现 姓 名 李坚 学 号 0855010206 班 级 计算机 002 指导老师 文宏 湖南科技大学计算机科学与工程学院湖南科技大学计算机科学与工程学院 20112011 年年 9 9 月月 一 一 课程设计题目课程设计题目 利用 Windows Socket 编程实现局域网的聊天程序 要求能实现 消息的发送和接收 以及聊天软件的细节问题 二 二 题目分析题目分析 拿到题目之后先来了解 windows socket 连接的过程与相关的 API 函数 按照题目的要求 我简单的分析了下并做了初步的设计 利用 tcp 协议建立连接 这样服务器和客户端分离 服务端先启动 并监听端口 客户端启动之后连接服务端建立连接 接着收发聊天 信息 当任意一方连接断开的时候给出适当的提示并结束程序 因为功能比较简单 所以设计起来还是比较容易的 实际的操作 中我遇到了很多新奇的问题并通过一些方案修改或者实现了最终的 功能 三 三 设计步骤设计步骤 1 熟悉网络编程概念以及一些基本知识 2 在 windows 的编程环境下熟悉了常用 socket 函数 3 先整体再局部顺序设计程序 4 调试并修改程序 使之实现设计要求 5 测试程序 从中找出程序缺陷和可改进内容 6 重复修改和测试 以达到自己理想的功能 7 程序评定测试 8 撰写设计报告 四 四 设计过程设计过程 第一个版本并未实现收发同步 只是简单的阻塞式通信 因为没 有用到多线程 所以在程序监听网络数据写入时不能监听键盘输入 所以只能发一条后接一条 其中的问题可想而知 第二个版本用多线程实现了同时收发问题 在连接建立后新建一 个线程用来等待键盘输入 而主体线程等待网络输入 当网络输入 错误时 连接断开 结束线程并作下一步处理 这个版本就上个版 本改进很多 主要可以即时在屏幕输出接收到的消息 同时也出现 了另外一个缺陷 当键盘输入到一半时程序收到了网络的信息 这 个时候程序的做法是直接输出这条信息 这导致我们键盘输入的信 息被切断 很不人性化 第三个版本 也就是目前评测的版本 这个版本利用临界值来锁 定屏幕资源 让程序在同一时刻只能一个程序拥有屏幕控制权 这 样保证了不会交叉显示 另外我用自己的输入输出代替了原有的 scanf 和 printf 这样使读写更安全可靠 同时改进的还有等待机 制 在服务器启动之后立即监听本机 6000 端口 建立连接之后直接 开辟线程等待输入 而客户端启动时要输入目的机的 ip 地址 连接 完成时打印欢迎信息并开始进入聊天 聊天结束 断开 之后可以重 新输入目的机器 ip 地址以建立新连接 五 五 调用顺序图调用顺序图 服务端 Socket Blind Accept RecvSend Close Print Listen Socket 客户端 Connect RecvPrintSend Close 六 六 源代码源代码 1 共有文件 soc h 调试用文件 include void getime char s tim time t rawtime struct tm timeinfo time timeinfo localtime sprintf s tim 02d 02d 02d timeinfo tm hour timeinfo tm min timeinfo tm sec return 2 服务端 server cpp include include include include include socs h pragma comment lib ws2 32 lib DWORD WINAPI gotsListen LPVOID DWORD WINAPI setsListen LPVOID void geta char s void puta char int void getime char CRITICAL SECTION g cs CRITICAL SECTION t cs char bufer 1000 int buflen bool linked void main void HANDLE gotHandle HANDLE setHandle WORD wVerR WSADATA wsD wVerR MAKEWORD 1 1 if WSAStartup wVerR if LOBYTE wsD wVersion 1 HIBYTE wsD wVersion 1 WSACleanup return SOCKET scSr socket AF INET SOCK STREAM 0 SOCKADDR IN adrSr adrSr sin addr S un S addr htonl INADDR ANY adrSr sin family AF INET adrSr sin port htons 6000 bind scSr SOCKADDR listen scSr 5 SOCKADDR IN adrCl int len sizeof SOCKADDR while true printf bind d success n 6000 SOCKET scCon accept scSr SOCKADDR char s adr 100 strcpy s adr inet ntoa adrCl sin addr linked true printf link s be created n s adr InitializeCriticalSection gotHandle CreateThread NULL 0 setHandle CreateThread NULL 0 while linked Sleep 10 TerminateThread setHandle NULL CloseHandle gotHandle CloseHandle setHandle DeleteCriticalSection closesocket scCon printf nlink s closed n s adr closesocket scSr return DWORD WINAPI gotsListen LPVOID lpParam char gots 1000 while linked EnterCriticalSection if recv SOCKET lpParam gots 1000 0 1 break LeaveCriticalSection puta gots 1 linked false return 0 DWORD WINAPI setsListen LPVOID lpParam while linked geta bufer EnterCriticalSection send SOCKET lpParam bufer strlen bufer 1 0 LeaveCriticalSection puta bufer 0 ExitThread NULL return 0 void puta char s int sta int i 1 char s tim 16 getime s tim switch sta case 0 EnterCriticalSection while i printf b b printf local s n s n s tim s LeaveCriticalSection break case 1 EnterCriticalSection i buflen while i printf b b printf NET s n s n s tim s printf s bufer LeaveCriticalSection break void geta char s char c EnterCriticalSection printf bufer buflen 0 0 LeaveCriticalSection while c getch if c 31 s buflen c s buflen 0 printf c c LeaveCriticalSection else switch c case 13 EnterCriticalSection while buflen printf b b LeaveCriticalSection return case 8 EnterCriticalSection if buflen buflen printf b b s buflen 0 LeaveCriticalSection break 3 客户端 client cpp include include include include include socs h pragma comment lib ws2 32 lib DWORD WINAPI gotsListen LPVOID DWORD WINAPI setsListen LPVOID void geta char void puta char int void getime char CRITICAL SECTION t cs char bufer 1000 int buflen bool linked void main void HANDLE gotHandle HANDLE setHandle char s adr 10 WSADATA wsD if WSAStartup MAKEWORD 1 1 if wsD wVersion MAKEWORD 1 1 WSACleanup return SOCKET scSr socket AF INET SOCK STREAM 0 while true printf Ready to Connect scanf s s adr SOCKADDR IN adrSr adrSr sin addr S un S addr inet addr s adr adrSr sin family AF INET adrSr sin port htons 6000 linked connect scSr SOCKADDR if linked printf link s created success n s adr InitializeCriticalSection gotHandle CreateThread NULL 0 setHandle CreateThread NULL 0 while linked Sleep 10 TerminateThread setHandle NULL TerminateThread gotHandle NULL CloseHandle gotHandle CloseHandle setHandle DeleteCriticalSection else printf Failed to connect s check it and try again n s adr closesocket scSr printf nlink s be closed n s adr return DWORD WINAPI gotsListen LPVOID lpParam char gots 10000 while linked puts running EnterCriticalSection if recv SOCKET lpParam gots 1000 0 1 break LeaveCriticalSection puta gots 1 linked false ExitThread NULL return 0 DWORD WINAPI setsListen LPVOID lpParam while linked geta bufer EnterCriticalSection send SOCKET lpParam bufer strlen bufer 1 0 LeaveCriticalSection puta bufer 0 ExitThread NULL return 0 void puta char s int sta int i 2 char s tim 16 getime s tim switch sta case 0 EnterCriticalSection while i printf b b printf local s n s n s tim s LeaveCriticalSection break case 1 EnterCriticalSection i buflen while i printf b b printf NET s n s n s tim s printf s bufer LeaveCriticalSection break void geta char s char c EnterCriticalSection printf bufer buflen 0 0 LeaveCriticalSection while c getch if c 31 s buflen c s buflen 0 printf c c LeaveCriticalSection else switch c case 13 EnterCriticalSection while buflen printf b b LeaveCriticalSection return case 8 EnterCriticalSection if buflen buflen printf b b s buflen 0 LeaveCriticalSection br

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论