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 相关文章推荐
多线程爬虫批量下载pcgame图片url 保存为xml的实现代码
Jan 17 Python
Using Django with GAE Python 后台抓取多个网站的页面全文
Feb 17 Python
python套接字流重定向实例汇总
Mar 03 Python
python+pillow绘制矩阵盖尔圆简单实例
Jan 16 Python
python email smtplib模块发送邮件代码实例
Apr 26 Python
Redis使用watch完成秒杀抢购功能的代码
May 07 Python
Python设计模式之抽象工厂模式原理与用法详解
Jan 15 Python
新年快乐! python实现绚烂的烟花绽放效果
Jan 30 Python
python调用自定义函数的实例操作
Jun 26 Python
Python IDE Pycharm中的快捷键列表用法
Aug 08 Python
Pandas数据离散化原理及实例解析
Nov 16 Python
Pyqt5 关于流式布局和滚动条的综合使用示例代码
Mar 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
php smarty 二级分类代码和模版循环例子
2011/06/01 PHP
php 转换字符串编码 iconv与mb_convert_encoding的区别说明
2011/11/10 PHP
php curl_init函数用法
2014/01/31 PHP
微信支付的开发流程详解
2016/09/13 PHP
php自定义扩展名获取函数示例
2016/12/12 PHP
PHP 实现链式操作
2021/03/09 PHP
asp 的 分词实现代码
2007/05/24 Javascript
基于jquery的cookie的用法
2011/01/10 Javascript
cookie在javascript中的使用技巧以及隐私在服务器端的设置
2012/12/03 Javascript
javascript中对Attr(dom中属性)的操作示例讲解
2013/12/02 Javascript
含有CKEditor的表单如何提交
2014/01/09 Javascript
Jquery EasyUI中弹出确认对话框以及加载效果示例代码
2014/02/13 Javascript
Eclipse配置Javascript开发环境图文教程
2015/01/29 Javascript
JavaScript实现随机替换图片的方法
2015/04/16 Javascript
JavaScript检测原始值、引用值、属性
2016/06/20 Javascript
jquery判断iPhone、Android设备类型
2016/09/14 Javascript
ES6中Class类的静态方法实例小结
2017/10/28 Javascript
浅谈node.js 命令行工具(cli)
2018/05/10 Javascript
JS实现的简单下拉框联动功能示例
2018/05/11 Javascript
Element-UI中关于table表格的那些骚操作(小结)
2019/08/15 Javascript
微信小程序实现打开并下载服务器上面的pdf文件到手机
2019/09/20 Javascript
bootstrapValidator表单校验、更改状态、新增、移除校验字段的实例代码
2020/05/19 Javascript
Python使用functools实现注解同步方法
2018/02/06 Python
Pytorch 保存模型生成图片方式
2020/01/10 Python
python 写函数在一定条件下需要调用自身时的写法说明
2020/06/01 Python
Myprotein瑞典官方网站:畅销欧洲英国运动营养品牌
2018/01/22 全球购物
C++:局部变量能否和全局变量重名
2014/03/03 面试题
使用索引(Index)有哪些需要考虑的因素
2016/10/19 面试题
店长岗位职责
2013/11/21 职场文书
大学生学业生涯规划
2014/01/05 职场文书
2014年清明节寄语
2014/04/03 职场文书
研发工程师岗位职责
2014/04/28 职场文书
家长给老师的感谢信
2015/01/20 职场文书
2015国际残疾人日活动总结
2015/03/24 职场文书
日本读研:怎样写好一篇日本研究计划书?
2019/07/15 职场文书
GPU服务器的多用户配置方法
2022/07/07 Servers