Python聊天室程序(基础版)


Posted in Python onApril 01, 2018

本文实例为大家分享了Python聊天室程序的具体代码,供大家参考,具体内容如下

客户端代码:

# Filename: socketClient.py 
 
import socket 
import sys 
import threading 
 
# Client GUI 
from tkinter import * 
import Pmw 
 
 
 
# Create a TCP/IP socket 
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
# Connect the socket to the port where the server is listening 
server_address = ('localhost', 10000) 
print (sys.stderr, 'connecting to %s port %s' % server_address) 
sock.connect(server_address) 
 
root = Tk() 
# textDisplay 
textDisplay = Pmw.ScrolledText(root) 
textDisplay.pack(expand=1, padx=5, pady=5,side = LEFT) 
# textInput 
textInput = Pmw.ScrolledText(root) 
textInput.pack(expand=1, padx=5, pady=5,side = LEFT) 
# Send Button and its callback 
def sendMsg(event): 
 message = socket.gethostname()+':'+ textInput.get() 
 #print (sys.stderr, 'sending "%s"' % message) 
 print(message) 
 sock.sendall(message.encode()) 
 textInput.clear() 
 #data = sock.recv(100) 
 #textDisplay.insert(END, data) 
 #print (sys.stderr, 'received "%s"' % data) 
  
sendBtn = Button(root, text="Send") 
sendBtn.bind('<Button-1>', sendMsg) 
sendBtn.pack(side = LEFT) 
 
def receiveMsg(): 
 while True: 
  data = sock.recv(100) 
  print (sys.stderr, 'client received "%s"' % data) 
  textDisplay.insert(END, data) 
  
 
receiveThread = threading.Thread(name='waitForMSG', target=receiveMsg) 
receiveThread.start() 
 
root.mainloop()

 服务器端代码:

# Filename: socketServer.py 
 
import socket 
import sys 
 
# Create a TCP/IP socket 
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
 
# Bind the socket to the port 
server_address = ('localhost', 10000) 
print (sys.stderr, 'starting up on %s port %s' % server_address) 
sock.bind(server_address) 
 
# Listen for incoming connections 
sock.listen(1) 
 
while True: 
 # Wait for a connection 
 print (sys.stderr, 'waiting for a connection') 
 connection, client_address = sock.accept() 
 
 try: 
  print (sys.stderr, 'connection from', client_address) 
 
  # Receive the data in small chunks and retransmit it 
  while True: 
   data = connection.recv(16) 
   print (sys.stderr, 'received "%s"' % data) 
   if data: 
    print (sys.stderr, 'sending data back to the client') 
    connection.sendall(data) 
   else: 
    print (sys.stderr, 'no data from', client_address) 
    break 
 finally: 
  # Clean up the connection 
  connection.close()

客户端在监听服务器的消息采用了多线程的方法。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python 正则表达式入门(中级篇)
Dec 07 Python
Python编程使用*解包和itertools.product()求笛卡尔积的方法
Dec 18 Python
Python实现识别手写数字 Python图片读入与处理
Mar 23 Python
Python入门必须知道的11个知识点
Mar 21 Python
python3解析库pyquery的深入讲解
Jun 26 Python
Python自定义装饰器原理与用法实例分析
Jul 16 Python
python 获取一个值在某个区间的指定倍数的值方法
Nov 12 Python
python去重,一个由dict组成的list的去重示例
Jan 21 Python
python绘制漏斗图步骤详解
Mar 04 Python
解决python中导入win32com.client出错的问题
Jul 26 Python
pandas read_excel()和to_excel()函数解析
Sep 19 Python
Python中OpenCV实现查找轮廓的实例
Jun 08 Python
Python socket实现简单聊天室
Apr 01 #Python
简单实现python聊天程序
Apr 01 #Python
简单实现Python爬取网络图片
Apr 01 #Python
Python中elasticsearch插入和更新数据的实现方法
Apr 01 #Python
python之DataFrame实现excel合并单元格
Feb 22 #Python
python合并同类型excel表格的方法
Apr 01 #Python
python实现两个文件合并功能
Apr 01 #Python
You might like
php chr() ord()中文截取乱码问题解决方法
2008/09/08 PHP
Win下如何安装PHP的APC拓展
2013/08/07 PHP
php使用GeoIP库实例
2014/06/27 PHP
thinkphp5框架扩展redis类方法示例
2019/05/06 PHP
用ADODB.Stream转换
2007/01/22 Javascript
[推荐]javascript 面向对象技术基础教程
2009/03/03 Javascript
js语法学习之判断一个对象是否为数组
2014/05/13 Javascript
jquery trigger伪造a标签的click事件取代window.open方法
2014/06/23 Javascript
手机号码,密码正则验证
2014/09/04 Javascript
JQuery异步获取返回值中文乱码的解决方法
2015/01/29 Javascript
jquery滚动到顶部底部代码
2015/04/20 Javascript
JS面试题---关于算法台阶的问题
2016/07/26 Javascript
jQuery Raty 一款不错的星级评分插件
2016/08/24 Javascript
jquery获取table指定行和列的数据方法(当前选中行、列)
2016/11/07 Javascript
JQueryEasyUI之DataGrid数据显示
2016/11/23 Javascript
漂亮实用的页面loading(加载)封装代码
2017/02/03 Javascript
详解ionic本地相册、拍照、裁剪、上传(单图完全版)
2017/10/10 Javascript
JS计算输出100元钱买100只鸡问题的解决方法
2018/01/04 Javascript
原生JS实现图片懒加载之页面性能优化
2019/04/26 Javascript
Angular中innerHTML标签的样式不起作用的原因解析
2019/06/18 Javascript
django框架模板中定义变量(set variable in django template)的方法分析
2019/06/24 Python
python 画出使用分类器得到的决策边界
2019/08/21 Python
初次部署django+gunicorn+nginx的方法步骤
2019/09/11 Python
Python二次规划和线性规划使用实例
2019/12/09 Python
在Tensorflow中实现梯度下降法更新参数值
2020/01/23 Python
PyTorch: Softmax多分类实战操作
2020/07/07 Python
大学生职业生涯规划书范文
2014/01/14 职场文书
2014年公司植树节活动方案
2014/03/04 职场文书
详解MySQL中的主键与事务
2021/05/27 MySQL
浅谈mysql增加索引不生效的几种情况
2021/06/23 MySQL
Android自定义scrollview实现回弹效果
2022/04/01 Java/Android
MySQL创建管理子分区
2022/04/13 MySQL
Win10 Anaconda安装python-pcl
2022/04/29 Servers
MySQL 执行数据库更新update操作的时候数据库卡死了
2022/05/02 MySQL
解决Vmware虚拟机安装centos8报错“Section %Packages Does Not End With %End. Pane Is Dead”
2022/06/01 Servers
vscode内网访问服务器的方法
2022/06/28 Servers