Python socket实现简单聊天室


Posted in Python onApril 01, 2018

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

服务端使用了select模块,实现了对多个socket的监控。客户端由于select在Windows下只能对socket使用,所以使用了多线程来实现对客户端输入和socket连接的同时监控。注意这里的socket设置为了非阻塞。这样就实现了在一个线程中同时进行socket的接收和发送。

服务器代码:

# -*- coding: utf-8 -*-
import socket,select

connection_list = []
host = ''
port = 10001

def board_cast(sock,message):
 for socket in connection_list:
  if socket != server_sock and socket != sock:
   try:
    socket.send(message)
   except:
    socket.close()
    print str(socket.getpeername())+' is offline'
    connection_list.remove(socket)

server_sock = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
server_sock.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
server_sock.setblocking(0)
server_sock.bind((host,port))
server_sock.listen(10)
connection_list.append(server_sock)

while 1:
 readable,writable,error = select.select(connection_list,[],[])
 for sock in readable:
  if sock == server_sock:
   connection,connection_add = sock.accept()
   message = str(connection_add)+'enter room'
   board_cast(connection,message)
   print connection_add,'%s connect'
   connection_list.append(connection)
  else:
   try:
    date = sock.recv(1024)
    print date
    board_cast(sock,'('+str(sock.getpeername())+') :'+date)
   except:
    message2 = str(sock.getpeername())+ 'is offline'
    board_cast(sock,message2)
    print str(sock.getpeername())+ ' is offline'
    sock.close()
    connection_list.remove(sock)
    continue

客户端代码:

# -*- coding: utf-8 -*-
import socket,threading,time
flag = 0
date = ''
lock = threading.Lock()

host = 'localhost'
port = 10001
client_sock = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
client_sock.setblocking(0)

class Mythread1(threading.Thread):
 def __init__(self):
  threading.Thread.__init__(self)
 def run(self):
  global flag, date
  while 1:
   date = raw_input()
   if len(date):
    lock.acquire()
    flag = 1
    lock.release()

class Mythread2(threading.Thread):
 def __init__(self):
  threading.Thread.__init__(self)
 def run(self):
  global flag
  global date
  while 1:
   try:
    buf = client_sock.recv(1024)
    if len(buf):
     print buf
   except:
    pass
   if flag:
    try:
     client_sock.send(date)
    except socket.error, e:
     print e
    lock.acquire()
    flag = 0
    lock.release()



try:
 client_sock.connect((host,port))
 print"连接成功"
except socket.error,e:
 print e

t1 = Mythread1()
t2 = Mythread2()
t1.start()
t2.start()

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

Python 相关文章推荐
python使用正则表达式检测密码强度源码分享
Jun 11 Python
详解Python函数作用域的LEGB顺序
May 14 Python
浅析Python中的for 循环
Jun 09 Python
python pandas 对时间序列文件处理的实例
Jun 22 Python
pycharm重置设置,恢复默认设置的方法
Oct 22 Python
Python异常处理知识点总结
Feb 18 Python
详解python爬虫系列之初识爬虫
Apr 06 Python
Python编写带选项的命令行程序方法
Aug 13 Python
python七种方法判断字符串是否包含子串
Aug 18 Python
OpenCV+python实现膨胀和腐蚀的示例
Dec 21 Python
python迷宫问题深度优先遍历实例
Jun 20 Python
利用 Python 的 Pandas和 NumPy 库来清理数据
Apr 13 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
Python中一行和多行import模块问题
Apr 01 #Python
You might like
PHP 变量定义和变量替换的方法
2009/07/30 PHP
PHP常用函数总结(180多个)
2016/12/25 PHP
PHP实现一维数组与二维数组去重功能示例
2018/05/24 PHP
extJs 常用到的增,删,改,查操作代码
2009/12/28 Javascript
QUnit jQuery的TDD框架
2010/11/04 Javascript
基于jquery实现的鼠标滑过按钮改变背景图片
2011/07/15 Javascript
jquery 年会抽奖程序
2011/12/22 Javascript
JS实现点击复选框将按钮或文本框变为灰色不可用的方法
2015/08/11 Javascript
freemarker判断对象是否为空的方法
2015/08/13 Javascript
js获取时间函数及扩展函数的方法
2016/10/30 Javascript
JS获取年月日时分秒的方法分析
2016/11/28 Javascript
通过js控制时间,一秒一秒自己动的实例
2017/10/25 Javascript
HTML元素拖拽功能实现的完整实例
2020/12/04 Javascript
手写Vue2.0 数据劫持的示例
2021/03/04 Vue.js
[42:34]VP vs VG 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
[39:19]完美世界DOTA2联赛PWL S2 SZ vs LBZS 第二场 11.26
2020/11/30 DOTA
python之Socket网络编程详解
2016/09/29 Python
Python实现针对给定字符串寻找最长非重复子串的方法
2018/04/21 Python
python实现随机梯度下降法
2020/03/24 Python
详解python selenium 爬取网易云音乐歌单名
2019/03/28 Python
OpenCV搞定腾讯滑块验证码的实现代码
2019/05/18 Python
Python中PyQt5/PySide2的按钮控件使用实例
2019/08/17 Python
Pytorch中的自动求梯度机制和Variable类实例
2020/02/29 Python
python实现文字版扫雷
2020/04/24 Python
在python里使用await关键字来等另外一个协程的实例
2020/05/04 Python
基于opencv实现简单画板功能
2020/08/02 Python
python反爬虫方法的优缺点分析
2020/11/25 Python
CSS3实现酷炫的3D旋转透视效果
2019/11/21 HTML / CSS
探究 canvas 绘图中撤销(undo)功能的实现方式详解
2018/05/17 HTML / CSS
俄罗斯天然和有机产品、健康生活网上商店:Fitomarket.ru
2020/10/09 全球购物
绩效工资分配方案
2014/01/18 职场文书
法人单位授权委托书范文
2014/10/06 职场文书
党的群众路线教育实践活动专题组织生活会发言材料
2014/10/17 职场文书
五星红旗迎风飘扬观后感
2015/06/17 职场文书
2015年法律事务部工作总结
2015/07/27 职场文书
2016新年问候语大全
2015/11/11 职场文书