计算机网络课程设计--基于TCP协议网上聊天程序--python实现带图形界面--socket--多线程

                                          基于TCP协议网上聊天程序

引言

21世纪是一个以网络为核心的信息时代,要实现信息化,就必须依靠完善的网络。而随着计算机技术和通讯技术的迅猛发展,计算机网络已经渗透到各个应用领域,其中最突出的是以TCP/IP协议为核心的Internet网络发展最为迅速。因此,计算机应用程序的开发也由传统单机处理模式,转向为多机通信为主的网络应用开发。

1设计任务

1.1系统目标

综合应用计算机网络理论知识、程序设计语言和网络服务器平台,对目标系统进行分析、设计、实现,最后完成必要的测试。在深入理解计算机网络基本原理的基础上,将书本上抽象的概念与具体的实现技术相结合,体会网络协议的设计与实现的过程,以及专业技术人员所使用的基本方法与技巧。基于TCP协议实现一简单的聊天程序实现网上聊天,包括服务器和客户端。要求:

(1)支持多人聊天

(2)客户端具有图形化用户界面

1.2系统功能

服务器端运行稳定,客户端具有图形化用户界面,且使用简便。服务器端和客户端可以运行在多个系统平台,具有良好的兼容性能。服务器端和客户端功能独立,可以运行在同一台计算机上或不同的计算机上,具有良好的灵活性。

具体功能:

(1)用户注册,用户的密码采用MD5算法就行加密;

(2)用户登录,在密码框中,用户输入的密码显示为“*”;

(3)显示在线用户,用户登录或退出成功,都会刷新在线用户列表;

(4)支持多人聊天,聊天发送的消息:用户名称、发送日期时间和内容。

2系统分析

2.1理论分析

TCP/IP协议的核心部分是传输层协议(TCP、UDP),网络层协议(IP)和物理 接口层,这三层通常是在操作系统内核中设计。因此用户一般不涉及。TCP是面 向连接的,通信双方保持一条通路,好比目前的电话线,使用telnet登陆 BBS, 用的就是 TCP协议;UDP是无连接的,通信双方都不保持对方的状态,浏览器访问Internet时使用的HTT协议就是基于UDP协议的。编程时,编程界面有两种形式:一、由内核心直接提供的系统调用;二、使用以库函数方式提供的各种函数。前者为核内设计,后者为核外设计。用户服务要通过核外的应用程序才能设计,所以要使用套接字(socket)来设计。

2.2客户端/服务器端模式

C/S结构(Client/Server结构)是大家熟知的客户端和服务器端结构。它是软件系统体系结构,通过它可以充分利用两端硬件环境的优势,将任务合理分配到Client端和Server端来实现,降低了系统的通讯开销。目前大多数应用软件系统都是Client/Server形式的两层结构,由于现在的软件应用系统正在向分布式的 Web应用发展,Web和 Client/Server应用都可以进行同样的业务处理,应用不同的模块共享逻辑组件。因此,内部的和外部的用户都可以访问新的和现有的应用系统,通过现有应用系统中的逻辑可以扩展出新的应用系统。这也就是目前应用系统的发展方向。

2.3 Socket介绍

Socket是建立在传输层协议(主要是TCP和UDP)上的一种套接字规范,最初是由美国加州Berkley大学提出,它定义两台计算机间进行通信的规范(也是一种编程规范,如果说两台计算机是利用一个“通道”进行通信,那么这个“通道”的两端就是两个套接字。套接字屏蔽了底层通信软件和具体操作系统的差异,使得任何两台安装了TCP协议软件和实现了套接字规范的计算机之间的通信成为可能。

Socket是一个抽象层,应用程序可以通过它发送或接收数据,可对其进行像对文件一样的打开、读写和关闭等操作。套接字允许应用程序将I/O插入到网络中,并与网络中的其他应用程序进行通信。网络套接字是IP地址与端口的组合。

Socket 系统调用包括创建 Socket、将创建的 Socket 与本地端口绑定、 建立Socket 连接服务器、监听是否有连接、请求数据的可控缓冲发送和可控缓冲接收,到最后关闭 Socket。

服务器端先初始化Socket,然后与端口绑定(bind),对端口进行监听(listen),调用accept阻塞,等待客户端连接。在这时如果有个客户端初始化一个Socket,然后连接服务器(connect),如果连接成功,这时客户端与服务器端的连接就建立了。客户端发送数据请求,服务器端接收请求并处理请求,然后把回应数据发送给客户端,客户端读取数据,最后关闭连接,一次交互结束。

                                                              图2.3-1 Socket介绍

2.4开发环境

PyCharm

PyCharm是一种Python IDE,带有一整套可以帮助用户在使用Python语言开发时提高其效率的工具,比如调试、语法高亮、Project管理、代码跳转、智能提示、自动完成、单元测试、版本控制。此外,该IDE提供了一些高级功能,以用于支持Django框架下的专业Web开发。

3总体设计

3.1体系结构设计

在通信工具中,通常都采用客户端/服务器(C/S)体系结构,即客户机和服务器结构。它是软件系统体系结构,通过它可以充分利用两端硬件环境的优势,将任务合理分配到Client端和Server端来实现,降低了系统的通讯开销。目前大多数应用软件系统都是Client/Server形式的两层结构,由于现在的软件应用系统正在向分布式的Web应用发展,Web和Client/Server应用都可以进行同样的业务处理

  • 44
    点赞
  • 259
    收藏
    觉得还不错? 一键收藏
  • 92
    评论
一、实验目的 1.掌握通信规范的制定及实现。 2.练习较复杂的网络编程,能够把协议设计思想应用到现实应用中。 二、实验内容和要求 1.进一步熟悉VC++6编程环境; 2.利用VC++6进行较复杂的网络编程,完成网络聊天室的设计及编写; 三、实验(设计)仪器设备和材料 1.计算机及操作系统:PC机,Windows; 2.网络环境:可以访问互联网; 四、 TCP/IP程序设计基础 基于TCP/IP的通信基本上都是利用SOCKET套接字进行数据通讯,程序一般分为服务器端和用户端两部分。设计思路(VC6.0下): 第一部分 服务器端 一、创建服务器套接字(create)。 二、服务器套接字进行信息绑定(bind),并开始监听连接(listen)。 三、接受来自用户端的连接请求(accept)。 四、开始数据传输(send/receive)。 五、关闭套接字(closesocket)。 第二部分 客户端 一、创建客户套接字(create)。 二、与远程服务器进行连接(connect),如被接受则创建接收进程。 三、开始数据传输(send/receive)。 四、关闭套接字(closesocket)。 CSocket的编程步骤:(注意我们一定要在创建MFC程序第二步的时候选上Windows Socket选项,其中ServerSocket是服务器端用到的,ClientSocket是客户端用的。) (1)构造CSocket对象,如下例: CSocket ServerSocket; CSocket ClientSocket; (2)CSocket对象的Create函数用来创建Windows Socket,Create()函数会自行调用Bind()函数将此Socket绑定到指定的地址上面。如下例: ServerSocket.Create(823); //服务器端需要指定一个端口号,我们用823。 ClientSocket.Create(); //客户端不用指定端口号。 (3)现在已经创建完基本的Socket对象了,现在我们来启动它,对于服务器端,我们需要这个Socket不停的监听是否有来自于网络上的连接请求,如下例: ServerSocket.Listen(5);//参数5是表示我们的待处理Socket队列中最多能有几个Socket。 (4)对于客户端我们就要实行连接了,具体实现如下例: ClientSocket.Connect(CString SerAddress,Unsinged int SerPort);//其中SerAddress是服务器的IP地址,SerPort是端口号。 (5)服务器是怎么来接受这份连接的呢?它会进一步调用Accept(ReceiveSocket)来接收它,而此时服务器端还须建立一个新的CSocket对象,用它来和客户端进行交流。如下例: CSocket ReceiveSocket; ServerSocket.Accept(ReceiveSocket); (6)如果想在两个程序之间接收或发送信息,MFC也提供了相应的函数。如下例: ServerSocket.Receive(String,Buffer); //String是你要发送的字符串,Buffer是发送字符串的缓冲区大小。ServerSocket.Send(String,Butter);//String是你要接收的字符串,Buffer是接收字符串的缓冲区大小。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 92
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值