设计内容:

一、了解 Socket 通信的原理,在此基础上编写一个聊天程序。
二、在实现聊天功能的基础上,使用Tkinter实现聊天的界面

代码

server

from socket import *
import tkinter as tk
import tkinter.scrolledtext as tst
import time
import tkinter.messagebox
import threadingclass Application(tk.Frame):def __init__(self, master):tk.Frame.__init__(self, master)self.grid()self.createWidgets()def createWidgets(self):# 显示聊天窗口self.textEdit = tst.ScrolledText(self, width=50, height=15)self.textEdit.grid(row=0, column=0, rowspan=1, columnspan=4)# 定义标签,改变字体颜色self.textEdit.tag_config('server', foreground='red')self.textEdit.tag_config('guest', foreground='blue')# 编辑窗口self.inputText = tk.Text(self, width=40, height=5)self.inputText.grid(row=1, column=0, columnspan=1)# 定义快捷键,按下回车即可发送消息self.inputText.bind("<KeyPress-Return>", self.textSendReturn)# 发送按钮self.btnSend = tk.Button(self, text='send', command=self.textSend)self.btnSend.grid(row=1, column=3)# 开启一个线程用于接收消息并显示在聊天窗口t = threading.Thread(target=self.getInfo)t.start()def textSend(self):# 获取Text的所有内容str = self.inputText.get('1.0', 'end-1c')if str != "":# 显示发送时间和发送消息timemsg = '服务端' + time.strftime('%Y-%m-%d %H:%M:%S', time.localtime()) + '\n'self.textEdit.config(state='normal')self.textEdit.insert(tk.END, timemsg, 'server')self.textEdit.insert(tk.END, str + '\n')# 将滚动条拉到最后显示最新消息self.textEdit.see(tk.END)self.textEdit.config(state='disabled')self.inputText.delete(0.0, tk.END)  # 删除输入框的内容# 发送数据到服务端sendMessage = bytes(str, encoding='utf8')# 发送输入的数据,与UDP有点不同,使用的是send方法,不需要指定服务器和端口,因为已经建立了一条tcp连接connectionSocket.send(sendMessage)else:tk.messagebox.showinfo('警告', "不能发送空白信息!")def getInfo(self):while True:recMsg = connectionSocket.recv(1024).decode("utf-8") + '\n'revTime = '客户端' + time.strftime('%Y-%m-%d %H:%M:%S', time.localtime()) + '\n'# 通过设置state属性设置textEdit可编辑self.textEdit.config(state='normal')self.textEdit.insert(tk.END, revTime, 'guest')self.textEdit.insert(tk.END, recMsg)# 将滚动条拉到最后显示最新消息self.textEdit.see(tk.END)# 通过设置state属性设置textEdit不可编辑self.textEdit.config(state='disabled')def textSendReturn(self, event):if event.keysym == "Return":self.textSend()root = tk.Tk()
root.title('服务端')# 网络相关
# 指定服务器使用的端口
serverPort = 10000
serverSocket = socket(AF_INET, SOCK_STREAM)
# 绑定端口
serverSocket.bind(('127.0.0.1', serverPort))
# 定义最大连接数
serverSocket.listen(5)
print('等待连接....')
# 接受请求则建立一个连接
connectionSocket, addr = serverSocket.accept()
print('一个连接')
app = Application(master=root)
app.mainloop()

client

from socket import *
import tkinter as tk
import tkinter.scrolledtext as tst
import time
import tkinter.messagebox
import threadingclass Application(tk.Frame):def __init__(self, master):tk.Frame.__init__(self, master)self.grid()self.createWidgets()def createWidgets(self):# 显示聊天窗口self.textEdit = tst.ScrolledText(self, width=50, height=15)self.textEdit.grid(row=0, column=0, rowspan=1, columnspan=4)self.textEdit.config(state='disabled')# 定义标签,改变字体颜色self.textEdit.tag_config('server', foreground='red')self.textEdit.tag_config('guest', foreground='blue')# 编辑窗口self.inputText = tk.Text(self, width=40, height=5)self.inputText.grid(row=1, column=0, columnspan=1)# 定义快捷键,按下回车即可发送消息self.inputText.bind("<KeyPress-Return>", self.textSendReturn)# 发送按钮self.btnSend = tk.Button(self, text='send', command=self.textSend)self.btnSend.grid(row=1, column=3)# 开启一个线程用于接收消息并显示在聊天窗口t = threading.Thread(target=self.getInfo)t.start()def textSend(self):# 获取Text的所有内容# https://stackoverflow.com/questions/14824163/how-to-get-the-input-from-the-tkinter-text-box-widgetstr = self.inputText.get('1.0', 'end-1c')if str != "" and str != None:# 显示发送时间和发送消息timemsg = '客户端' + time.strftime('%Y-%m-%d %H:%M:%S', time.localtime()) + '\n'# 通过设置state属性设置textEdit可编辑self.textEdit.config(state='normal')self.textEdit.insert(tk.INSERT, timemsg, 'guest')self.textEdit.insert(tk.INSERT, str + '\n')# 将滚动条拉到最后显示最新消息self.textEdit.see(tk.END)# 通过设置state属性设置textEdit不可编辑self.textEdit.config(state='disabled')self.inputText.delete(0.0, tk.END)  # 删除输入框的内容# 发送数据到服务端sendMessage = bytes(str, encoding='utf8')# 发送输入的数据,与UDP有点不同,使用的是send方法,不需要指定服务器和端口,因为已经建立了一条tcp连接clientSocket.send(sendMessage)else:tk.messagebox.showinfo('警告', "不能发送空白信息!")def getInfo(self):global clientSocketwhile True:# 接收数据,1024指定缓存长度,使用的是recv方法recMessage = clientSocket.recv(1024).decode("utf8") + '\n'# 接受时间和接收的数据recTime = '服务端' + time.strftime('%Y-%m-%d %H:%M:%S', time.localtime()) + '\n'self.textEdit.config(state='normal')# server作为标签,改变字体颜色self.textEdit.insert(tk.END, recTime, 'server')self.textEdit.insert(tk.END, recMessage)# 将滚动条拉到最后显示最新消息self.textEdit.see(tk.END)self.textEdit.config(state='disabled')def textSendReturn(self, event):if event.keysym == "Return":self.textSend()# 指定服务器地址,端口
servername = '127.0.0.1'
serverport = 10000
# ipRootFrame = tk.Tk()
# ipRootFrame.title('输入服务器ip')
# ipDialog = inputIPdialog(ipRootFrame)
# ipDialog.mainloop()
# socket第一个参数指定使用IPV4协议,第二个参数指定这是一个TCP套接字
clientSocket = Nonetry:clientSocket = socket(AF_INET, SOCK_STREAM)
except:tk.messagebox.showinfo('未知错误', '检查服务器地址是否错误!')# tcp连接需要先经过握手建立连接
clientSocket.connect((servername, serverport))
root = tk.Tk()
root.title('客户端')app = Application(master=root)
app.mainloop()

网络聊天程序的设计与实现 python实现 计算机网络课程设计相关推荐

  1. 网络嗅探器的设计与实现 python实现 计算机网络课程设计

    实验内容 设计一个可以监视网络的状态.数据流动情况以及网络上传输 的信息的网络嗅探器 代码 import socket import threading import time import logg ...

  2. python网络爬虫课程设计题目_山东建筑大学计算机网络课程设计《基于Python的网络爬虫设计》...

    山东建筑大学计算机网络课程设计<基于Python的网络爬虫设计> 山东建筑大学 课 程 设 计 成 果 报 告 题 目: 基于Python的网络爬虫设计 课 程: 计算机网络A 院 (部) ...

  3. 计算机网络课程设计报告 组建校园局域网,计算机网络课程设计报告-组建校园局域网.pdf...

    课程设计报告 课程设计题目:组建校园局域网 专 业: 班 级: 姓 名 : 学 号 : 指导教师 : 2015 年 7 月 3 日 计算机网络课程设计 目录 一.课程设计目的及要求 - 2 - 1.1 ...

  4. 四川大学计算机学院有什么课程设计,四川大学16秋《计算机网络课程设计9013》课程设计...

    四川大学16秋<计算机网络课程设计9013>课程设计 <计算机网络>课程设计实验大纲 一.本课程实验教学的目的和要求 本实验教学的目的是使得学生建立对计算机网络的基本概念,理解 ...

  5. 武科大计算机网络课程设计,【川大】计算机网络课程设计9013,奥鹏2017

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 一. 参考设计题目 1.规划设计一个拥有200个机位的网吧.要求从以下几个方面进行设计: 1)需求分析(目的,特点,策略) 2)网络规划设计 ①结构选型( ...

  6. 计算机网络相关的课程设计题目,计算机网络课程设计专业论文题目 计算机网络课程设计专业论文题目怎么拟...

    汇总了[100道]与计算机网络课程设计相关论文选题,为广大毕业生和职称者推荐计算机网络课程设计专业论文题目,解决在校大学生不知道计算机网络课程设计专业论文题目怎么拟等相关问题! 一.比较好写的计算机网 ...

  7. 计算机网络课程设计 文华学院,计算机网络课程设计-校园网的组建与设计.doc

    计算机网络课程设计-校园网的组建与设计 华中科技大学文华学院 计算机网络课程设计报告书 课程名称:校园网的组建与设计 学 部:信息科学与技术学部 专业班级:软件工程2009级(1)班 指导教师: 廖剑 ...

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

                                              基于TCP协议网上聊天程序 引言 21世纪是一个以网络为核心的信息时代,要实现信息化,就必须依靠完善的网络.而随着计 ...

  9. 计算机网络课程设计之网络聊天程序的设计与实现

    前言 计算机网络课程设计开始,要求用C/C++,而且有些题目还要有图形界面,因此决定用Qt写图形界面,同时决定用一个程序完成所有的实验设计. 白嫖容易,创作不易,本文原创,转载请注明!!! 源码和可运 ...

最新文章

  1. 美团方法论,苦练基本功
  2. cyico收集的关于utf8转换gb2312,以及关于javascript实现urlencode和urldecode的一些方法...
  3. java redis 批量删除key_Redis,就是这么朴实无华
  4. 创建maven项目,配置maven地址
  5. c语言输出数字菱形北京理工大学,C语言程序的设计—北京理工大学MOOC提交作业.docx...
  6. 公务员考试中公共基础知识计算机,2012山东省公务员考试公共基础知识最新考试试题库(完整版)...
  7. mysql全量备份命令_linux下进行定时mysql数据库全量备份
  8. mac打开chm格式文件
  9. 计算机普通用户禁止修改c盘,win10系统禁止Guest账户访问C盘的设置技巧
  10. gin-vue-admin 使用docker容器中的数据库
  11. Android也行5view斜体,Android TextView同时设置粗体和斜体
  12. js判断字符串字符数(汉字算两个)
  13. Wear OS手表应用开发教程之-滑动隐藏布局-SwipeDismissFrameLayout
  14. 2023情人节送另一半什么好?四款适合送女友的数码好物分享
  15. Alignedreid项目源码分析
  16. 微信营销的总纲领:沐风微信水库理论 2.0
  17. python调用java之Jpype实现java接口
  18. OpenIL(DevIL)- 开发者图像库
  19. 一些常用的ubuntu软件安装方式
  20. 人物-商界-许家印:许家印

热门文章

  1. 谷粒学院前台登录流程
  2. 热风枪的温度设置(与焊锡有无含铅有关)和使用注意
  3. WEB——HTML、CSS、javascript
  4. Matlab中测程序运行时间
  5. 如何搭建vue项目,完整搭建vue项目
  6. python 将函数封装成pyd或者so文件,调用该文件
  7. BetterGeo Mod 中文
  8. 《富爸爸,穷爸爸》思维导图
  9. STM32F103C8T6模拟IIC控制4针0.96寸OLED显示屏
  10. 计算机五大部件相关知识