【计网实验】基于socket的python chatroom

一、实验目的

熟悉和掌握socket编程的基本理论和方法,掌握基于TCP和UDP的工作原理以及Socket编程的一般方法,能够编写简单的网络应用程序。

二、实验内容及实验步骤

1.项目介绍

本项目采用C/S架构,基于python的socket库、threading等技术,采用TCP协议进行网络数据传输,实现了聊天室中的群聊和私聊功能。项目分为服务器端和客户端,服务器端存放用户连接信息包括用户的IP端口地址和用户信息,客户端通过服务器端将消息转发给其他用户。

2.主要功能

2.1 用户登录

    本项目给出默认的地址与端口,输入名称后点击登录按钮,进入聊天室。聊天室的文本框内显示“欢迎加入聊天室”,并实时显示此刻在线人数。

2.2 群发消息

    系统默认消息发送形式为群发,在用户列表中选择群发,聊天窗口标题显示此时用户的名称,点击发送按钮实现群发消息。此时自己的消息显示为蓝色,接收到其他用户的消息显示为绿色。

2.3 一对一聊天

    在用户列表中选择要发送对象的名称,聊天窗口标题显示要发送对象的名称,点击发送按钮实现一对一聊天。此时双方消息颜色均为红色。

2.基本实现原理介绍

2.1 服务器端

服务器端存放用户IP端口地址与用户信息。

登录:对默认端口进行监听,当新的客户端提出请求时,为其创建一个新线程并将此用户信息封装为一个在线用户存入用户数组中。

发送数据:服务端成功启动后创建一个新线程用于监听消息队列中的数据是否为空,如果不为空,则将其发送出去。

接收数据:对默认端口进行监听,当新的客户端提出请求时,为其创建一个新线程并将此用户信息封装为一个在线用户存入用户数组中。

2.2 客户端

    发送数据:客户端将数据发送给服务器,通过服务器将数据转发给目标用户。

    接收数据:客户端接收到数据后对数据进行解析,如果是表情包,则从表情字典中找到其对应的图片,如果是文字,则不需要变换。之后将接收到的数据显示到聊天框中。

3.网络编程部分介绍

3.1 socket()模块函数

    Python中用socket()函数创建套接字,语法格式为s =socket.socket(socket.AF_INET, socket.SOCK_STREAM),其中有两个属性:①地址簇:AF_INET(IPv4);②类型:SOCK_STREAM (使用TCP传输控制协议)。

【计网实验】基于socket的python chatroom_第1张图片

图 1 socket核心代码

3.2 TCP通信

【计网实验】基于socket的python chatroom_第2张图片图 2 socket

服务器端:

  • 创建一个socket对象
  • bind绑定ip和port

【计网实验】基于socket的python chatroom_第3张图片图 3 服务器接收socket

  • listen使套接字变为可以被动链接
  • accept等待客户端的链接。线程池中创建线程池线程执行指定方法,并将该线程排入线程池的队列等待执行。

【计网实验】基于socket的python chatroom_第4张图片图 4 服务器接收信息

  • recv/send接收发送数据

【计网实验】基于socket的python chatroom_第5张图片图 5 服务器转发数据

  • 关闭服务器端套接字

客户端:

  • 创建socket对象
  • 发送请求,连接服务器端Connect

【计网实验】基于socket的python chatroom_第6张图片图 6 客户端向服务器端发送请求

  • 发送接收数据

【计网实验】基于socket的python chatroom_第7张图片图 7 客户端接收服务器发送的信息

  • 关闭客户端套接字
  • 实验结果
  1. 服务器建立连接

运行Server服务器代码,显示“服务器已连接”则连接成功

  1. 用户登录

运行User用户程序,显示如下图形界面。地址、端口采用默认,输入名称后点击登录可以即可进入聊天室界面。

【计网实验】基于socket的python chatroom_第8张图片

图 9 聊天室登录界面

 

如果名称为空,弹出提示框“用户名不能为空”,如下图所示:

【计网实验】基于socket的python chatroom_第9张图片\

图 10 用户名不能为空

       当名称合法时,进入聊天室界面。对话框显示“欢迎进入聊天室!”。此时图形框标题为该用户名称,在线用户数在之前的基础上加一,同时用户列表上增加该用户的名称。

【计网实验】基于socket的python chatroom_第10张图片

 

图 11 聊天室

  1. 群聊

当前已有3名用户进入本聊天室,当A群发消息时,可以看到A、B、C三名用户均可以收到。接收到他人发送的消息字体颜色为绿色,自己发送的消息字体颜色为蓝色。

【计网实验】基于socket的python chatroom_第11张图片图 12 群聊功能

 

4.一对一聊天

当用户选择用户列表框中的其他用户时,点击发送消息,该消息只能被选择的用户接收到,其他用户的聊天框不显示该消息。并且标题变为本用户—>目标用户。

【计网实验】基于socket的python chatroom_第12张图片图 13 私聊功能

 

    如果选择私聊的用户是自己时,系统提示“自己不能和自己进行对话”。

5.发送表情包

点击表情按钮,系统显示表情包。

【计网实验】基于socket的python chatroom_第13张图片

图 15 表情包按钮

用户可以选择自己喜欢的表情包发送给聊天对象,如下所示:

【计网实验】基于socket的python chatroom_第14张图片图 16 发送表情包

 

你可能感兴趣的:(网络,tcp/ip,服务器)