Python socket C/S结构的聊天室应用实现


Posted in Python onNovember 30, 2014

Python socket C/S结构的聊天室应用

服务端:

#!/usr/bin/env python
#coding:utf8
 
import socket,select
def broadcast_data (sock,message):
 for socket in conn_list:
  if socket != server_socket and socket != sock :
   try :
    socket.send(message)
   except :
    socket.close()
    conn_list.remove(socket)
 
if __name__ == "__main__":
 conn_list = []
 recv_buffer = 4096
 PORT = 9999
 
 server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
 server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) #端口重用,可选
 server_socket.bind(('', PORT))
 server_socket.listen(99)
 
 conn_list.append(server_socket)
 
 print "Chat server started on port " + str(PORT)
 
 while 1:
  read_sockets,write_sockets,error_sockets = select.select(conn_list,[],[])
  for sock in read_sockets:
   #新建连接
   if sock == server_socket:
    sockfd, addr = server_socket.accept()
    conn_list.append(sockfd)
    print "Client (%s, %s) connected" % addr
    broadcast_data(sockfd, "[%s:%s] entered room\n" % addr)
   #进入聊天室
   else:
    try:
     data = sock.recv(recv_buffer)
     if data:
      broadcast_data(sock, "\r" + '<' + str(sock.getpeername()) + '> ' + data)
    except:
     broadcast_data(sock, "Client (%s, %s) is offline" % addr)
     print "Client (%s, %s) is offline" % addr
     sock.close()
     conn_list.remove(sock)
     continue
 
 server_socket.close()

客户端:

#!/usr/bin/env python
#coding:utf8
import socket,select,string,sys
 
def prompt() :
 sys.stdout.write('<You> ')
 sys.stdout.flush()
 
if __name__ == "__main__":
 
 if(len(sys.argv) < 3) :
  print 'Usage : python chat_client.py hostname port'
  sys.exit()
 
 HOST = sys.argv[1]
 PORT = int(sys.argv[2])
 
 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
 s.settimeout(2)
 
 try :
  s.connect((HOST, PORT))
 except :
  print 'Unable to connect'
  sys.exit()
 
 print 'Connected to remote host. Start sending messages'
 prompt()
 
 while 1:
  socket_list = [sys.stdin, s]
 
  read_sockets, write_sockets, error_sockets = select.select(socket_list , [], [])
 
  for sock in read_sockets:
   if sock == s:
    data = sock.recv(4096)
    if not data :
     print '\nDisconnected from chat server'
     sys.exit()
    else :
     sys.stdout.write(data)
     prompt()
 
   else :
    msg = sys.stdin.readline()
    s.send(msg)
    prompt()
Python 相关文章推荐
低版本中Python除法运算小技巧
Apr 05 Python
Python编写电话薄实现增删改查功能
May 07 Python
python3使用PyMysql连接mysql数据库实例
Feb 07 Python
Python3中的json模块使用详解
May 05 Python
数据清洗--DataFrame中的空值处理方法
Jul 03 Python
TensorFlow打印tensor值的实现方法
Jul 27 Python
对python3中pathlib库的Path类的使用详解
Oct 14 Python
解决python中遇到字典里key值为None的情况,取不出来的问题
Oct 17 Python
python的xpath获取div标签内html内容,实现innerhtml功能的方法
Jan 02 Python
如何利用Python开发一个简单的猜数字游戏
Sep 22 Python
python圣诞树编写实例详解
Feb 13 Python
python绘制分布折线图的示例
Sep 24 Python
Python open()文件处理使用介绍
Nov 30 #Python
Python fileinput模块使用介绍
Nov 30 #Python
Python 列表list使用介绍
Nov 30 #Python
Python 字典dict使用介绍
Nov 30 #Python
Python 序列化 pickle/cPickle模块使用介绍
Nov 30 #Python
Linux下Python获取IP地址的代码
Nov 30 #Python
Python re模块介绍
Nov 30 #Python
You might like
php4的session功能评述(二)
2006/10/09 PHP
php 根据url自动生成缩略图并处理高并发问题
2014/01/23 PHP
PHP使用mongoclient简单操作mongodb数据库示例
2019/02/08 PHP
ArrayList类(增强版)
2007/04/04 Javascript
jQuery 性能优化手册 推荐
2010/02/23 Javascript
JQuery FlexiGrid的asp.net完美解决方案 dotNetFlexGrid-.Net原生的异步表格控件
2010/09/12 Javascript
jquery.boxy弹出框(后隔N秒后自动隐藏/自动跳转)
2013/01/15 Javascript
js和html5实现手机端刮刮卡抽奖效果完美兼容android/IOS
2013/11/18 Javascript
jQuery原型属性和原型方法详解
2015/07/07 Javascript
Bootstrap 模态框实例插件案例分析
2016/12/28 Javascript
浅谈jQuery中的$.extend方法来扩展JSON对象
2017/02/12 Javascript
javascript ES6 新增了let命令使用介绍
2017/07/07 Javascript
用npm-run实现自动化任务的方法示例
2019/01/14 Javascript
微信小程序自定义弹窗实现详解(可通用)
2019/07/04 Javascript
vue调用语音播放的方法
2019/09/27 Javascript
解决vue单页面 回退页面 keeplive 缓存问题
2020/07/22 Javascript
jQuery实现评论模块
2020/08/19 jQuery
[05:49]2014DOTA2TI4正赛第二日综述 昔日冠军纷纷落马 VG LGD占尽先机
2014/07/20 DOTA
[36:33]完美世界DOTA2联赛循环赛 Matador vs Forest 第一场 11.06
2020/11/06 DOTA
python自定义函数实现一个数的三次方计算方法
2019/01/20 Python
Python爬取视频(其实是一篇福利)过程解析
2019/08/01 Python
Python如何调用外部系统命令
2019/08/07 Python
python3格式化字符串 f-string的高级用法(推荐)
2020/03/04 Python
如何解决cmd运行python提示不是内部命令
2020/07/01 Python
HTML5+lufylegend实现游戏中的卷轴
2016/02/29 HTML / CSS
AmazeUI 折叠面板的实现代码
2020/08/17 HTML / CSS
老师推荐信
2013/10/28 职场文书
大学生感恩父母演讲稿
2014/08/28 职场文书
纪检干部个人对照检查材料
2014/09/23 职场文书
服务员态度差检讨书
2014/10/28 职场文书
2014年后勤管理工作总结
2014/12/01 职场文书
2015年上半年信访工作总结
2015/03/30 职场文书
爱岗敬业先进典型事迹材料(2016推荐版)
2016/02/26 职场文书
Python3 如何开启自带http服务
2021/05/18 Python
python 开心网和豆瓣日记爬取的小爬虫
2021/05/29 Python
Python爬虫入门案例之爬取去哪儿旅游景点攻略以及可视化分析
2021/10/16 Python