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 相关文章推荐
pyqt4教程之messagebox使用示例分享
Mar 07 Python
python实现数通设备tftp备份配置文件示例
Apr 02 Python
详解在Python和IPython中使用Docker
Apr 28 Python
Python Nose框架编写测试用例方法
Oct 26 Python
Python使用cx_Freeze库生成msi格式安装文件的方法
Jul 10 Python
python读取几个G的csv文件方法
Jan 07 Python
python opencv 二值化 计算白色像素点的实例
Jul 03 Python
Flask框架中request、请求钩子、上下文用法分析
Jul 23 Python
Python3多线程版TCP端口扫描器
Aug 31 Python
django 链接多个数据库 并使用原生sql实现
Mar 28 Python
pytorch中 gpu与gpu、gpu与cpu 在load时相互转化操作
May 25 Python
Matplotlib绘制条形图的方法你知道吗
Mar 21 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操作MongoDB GridFS 存储文件的详解
2013/06/20 PHP
php写入、删除与复制文件的方法
2015/06/20 PHP
js 图片轮播(5张图片)
2008/12/30 Javascript
javascript 面向对象思想 附源码
2009/07/07 Javascript
获取HTML DOM节点元素的方法的总结
2009/08/21 Javascript
基于jquery ajax 用户无刷新登录方法详解
2012/04/28 Javascript
JQuery-tableDnD 拖拽的基本使用介绍
2013/07/04 Javascript
可自己添加html的伪弹出框实现代码
2013/09/08 Javascript
js使用循环清空某个div中的input标签值
2014/09/29 Javascript
JS打开新窗口防止被浏览器阻止的方法
2015/01/03 Javascript
jQuery选择id属性带有点符号元素的方法
2015/03/17 Javascript
jQuery中$.extend()用法实例
2015/06/24 Javascript
jQuery弹层插件jquery.fancybox.js用法实例
2016/01/22 Javascript
vue + element-ui实现简洁的导入导出功能
2017/12/22 Javascript
express默认日志组件morgan的方法
2018/04/05 Javascript
Vue实现一个图片懒加载插件
2019/03/11 Javascript
JavaScript实现单图片上传并预览功能
2019/09/30 Javascript
bootstrap+spring boot实现面包屑导航功能(前端代码)
2019/10/09 Javascript
js代码实现轮播图
2020/05/04 Javascript
vue 使用localstorage实现面包屑的操作
2020/11/16 Javascript
Python中装饰器兼容加括号和不加括号的写法详解
2017/07/05 Python
python语言中with as的用法使用详解
2018/02/23 Python
python如何在循环引用中管理内存
2018/03/20 Python
python实现简易内存监控
2018/06/21 Python
python添加模块搜索路径和包的导入方法
2019/01/19 Python
Python对象转换为json的方法步骤
2019/04/25 Python
在PyCharm中实现添加快捷模块
2020/02/12 Python
如何使用python传入不确定个数参数
2020/02/18 Python
css3 中实现炫酷的loading效果
2019/04/26 HTML / CSS
十八届三中全会报告学习材料
2014/02/17 职场文书
升学宴主持词
2014/04/02 职场文书
2015初中政教处工作总结
2015/07/21 职场文书
2015年教务主任工作总结
2015/07/22 职场文书
大学迎新生欢迎词
2015/09/29 职场文书
Nginx搭建rtmp直播服务器实现代码
2021/03/31 Servers
MySql 8.0及对应驱动包匹配的注意点说明
2021/06/23 MySQL