基于TCP的简单一对一聊天程序设计
目录
基于TCP的简单一对一聊天程序设计 (1)
1课程设计目的 (2)
2课程设计的要求及原理 (2)
3设计方案 (3)
4程序编写 (3)
5运行结果 (10)
6实习心得和体会 (11)
7参考文献 (11)
1课程设计目的
(1).通过课程设计,使学生理论联系实际,在实践中进一步了解计算机网络
体系结构,深入理解TCP/IP参考模型
(2).培养学生分析、解决问题的能力,提高学生动手能力。
(3).使学生掌握搜集资料、调查研究、整理报告的方法。
(4).初步掌握网络应用程序开发技术以及互联网的应用技术。
2课程设计的要求及原理
2.1课程设计要求
实现一个一对一的聊天程序。
其基本过程如下:
(1).服务器首先启动,创建套节字等待客户连接;
(2).客户启动以后,创建套接字,然后和服务器建立连接;
(3).连接建立以后,客户机和服务器可以通过建立的套节字连接进行通信。
(4).服务器和客户端可以是一台电脑上的两个进程,也可以使分别部署在两
台电脑上。
2.2课程设计原理
2.2.1客户服务器模型。
它是指客户/服务器模型是所有网络应用的基础。
客户/服务器分别指参与一次通信的两个应用实体,客户方主动地发起通信请求,服务器方被动地等待通信的建立。
它是一个在建立分布式应用时最常用的范例。
在这种方案中客户应用程序向服务器程序请求服务。
这种方式隐含了在建立客户机/服务器间通讯时的非对称性。
客户机/服务器模型工作时要求有一套为客户机和服务器所共识的惯例来保证服务能够被提供(或被接受)。
这一套惯例包含了一套协议。
它必须在通讯的两头都被实现。
根据不同的实际情况,协议可能是对称的或是非对称的。
在对称的协议中,每一方都有可能扮演主从角色;在非对称协议中,一方被不可改变地认为是主机,而另一方则是从机。
无论具体的协议是对称的或是非对称的,当服务被提供时必然存在"客户进程"和"服务进程"。
一个服务程序通常在一个众所周知的地址监听对服务的请求,也就是说,服务进程一直处于休眠状态,直到一个客户对这个服务的地址提出了连接请求。
在这个时刻,服务程序被"惊醒"并且为客户提供服务-对客户的请求作出适当的反应。
虽然基于连接的服务是设计客户机/服务器应用程序时的标准,但有些服务也是可以通过数据报套接口提供的。
2.2.2相关协议。
应用到的网络协议主要有TCP协议。
TCP协议被称作一种端对端协议。
这是因为它为两台计算机之间的连接起了重要作用:当一台计算机需要与另一台远程计算机连接时,TCP协议会让它们建立一个连接、发送和接收资料以及终止连接。
传输控制协议TCP协议利用重发技术和拥塞控制机制,向应用程序提供可靠的通信连接,使它能够自动适应网上的各种变化。
即使在Internet 暂时出现堵塞的情况下,TCP也能够保证通信的可靠。
IP协议只保证计算机能发送和接收分组资料,而TCP协议则可提供一个可靠的、可流控的、全双工的信息流传输服务。
3设计方案
首先本程序的定位是一对一的聊天程序;程序没有采用图形界面;程序的设计语言采用的是C++;基于winsock;开发工具为VC++。
聊天程序的设计可以采用UDP或者TCP,程序采用TCP。
采用的是客户服务器模型。
在本程序中,一个用户作为Server端,另一个用户作为Client端。
也就是说,作为Server端的用户,需要首先启动程序,等待Client端的连接请求。
Client端自动建立连接请求。
当TCP连接握手以后,双方方可进行交互。
在客户端用户进行消息的编写,发送和接受等功能;而服务器端发送的消息向客户端所有的用户进行发送可以称之为系统消息;服务器端收到某一个用户发送的消息之后可以向所有的其它用户进行转发。
连接断开之后,断开服务的客户端将不能够收到服务器转发的消息。
程序可在同台机器上或者是不同机器上运行。
在用C++语言进行代码的编写时主要应用到的是C++中的网络编程、输入输出处理、多线程以技术。
数据的传输使用的是I/O输入输出处理,用到类似cout<<"string";等的输出处理方法。
因为服务器是一直提供服务的,也就是说服务器一直是运行的状态,时刻等待着新的客户端提出连接请求,所以就需要使用到多线程的方法。
Socket类的实例的accept方法是一个阻塞式的方法,如果只是用进程来表示新的客户端,那么在现有进程没有结束的情况下,新的客户端在发送连接请求之后程序将不能继续向下执行,所以应该应用比进程更小的线程来解决这一问题。
4程序编写
4.1客户端与服务器端用到的相关类
4.2服务器端程序
4.3客户端程序
5运行结果
测试时在同一机器上运行的,有一个服务器和两个客户端。
Fig. 服务器端程序运行结果
Fig. 客户端运行结果
WangDing
6实习心得和体会
通过本次计算机网络课程设计,我对计算机网络这门课有了更深入的理解与认识。
了解了winsock编程技术,对于TCP协议有了更深入的理解。
我明白了对网络通讯程序的设计的原理和过程的透彻理解,是网络通讯程序的前提。
我在代码编写的时候,使用了集成开发工具vc++,所以编程的效率相对较高。
这个聊天程序只是实现了基本的功能,而且并没有提供较为友好的图形界面。
通常,网络应用程序包含两个独立的应用程序:客户程序和服务器程序。
但是,也可以设计同时完成这两种功能的程序,例如,一些服务器程序如果不能完成一个服务请求时,它将转而充当客户程序,向其它服务器程序请求信息。
通过这次的课程设计,我明白了很多。
我知道自己在实践动手能力方面还有很大欠缺,做出能够聊天的程序增加了我对网络编程的兴趣。
我也认识到了自己在编程方面的很多不足,对整个协议栈的了解还不太清晰,以后得总结一下这方面的知识。
我会更加努力,平时注重提高自己的实践动手能力,争取更大的进步。
7参考文献
[1]谢希仁.计算机网络(第5版).北京:电子工业出版社.
[2]钱能.C++程序设计教程.北京:清华大学出版社.
[3]陈鸣,计算机网络实践教程,机械工业出版社
[4]曹丽娜通信原理(第六版)国防大学出版社
11 / 11
Email:572645517@
Sunday, July 29, 2018。