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获取apk文件URL地址实例
Nov 01 Python
解决Python运行文件出现out of memory框的问题
Dec 03 Python
利用Python查看微信共同好友功能的实现代码
Apr 24 Python
python实现快递价格查询系统
Mar 03 Python
python torch.utils.data.DataLoader使用方法
Apr 02 Python
使用python处理题库表格并转化为word形式的实现
Apr 14 Python
Python3如何在服务器打印资产信息
Aug 27 Python
解决Windows下python和pip命令无法使用的问题
Aug 31 Python
Django用户认证系统如何实现自定义
Nov 12 Python
python list的index()和find()的实现
Nov 16 Python
Python利器openpyxl之操作excel表格
Apr 17 Python
浅谈tf.train.Saver()与tf.train.import_meta_graph的要点
May 26 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
浅析使用Turck-mmcache编译来加速、优化PHP代码
2013/06/20 PHP
php计算年龄精准到年月日
2015/11/17 PHP
PHP进行批量任务处理不超时的解决方法
2016/07/11 PHP
PHP中命名空间的使用例子
2019/03/22 PHP
PHPExcel实现的读取多工作表操作示例
2020/04/14 PHP
javascript 时间比较实现代码
2009/10/28 Javascript
一个js拖拽的效果类和dom-drag.js浅析
2010/07/17 Javascript
jQuery实现类似滑动门切换效果的层切换
2013/09/23 Javascript
jQuery操作cookie方法实例教程
2014/11/25 Javascript
JS的数组迭代方法
2015/02/05 Javascript
jQuery 3.0中存在问题及解决办法
2016/07/15 Javascript
Javascript发送AJAX请求实例代码
2016/08/21 Javascript
Bootstrap select实现下拉框多选效果
2016/12/23 Javascript
Webpack中css-loader和less-loader的使用教程
2017/04/27 Javascript
分享Angular http interceptors 拦截器使用(推荐)
2019/11/10 Javascript
解决vue项目中某一页面不想引用公共组件app.vue的问题
2020/08/14 Javascript
玩转python爬虫之正则表达式
2016/02/17 Python
Python调用系统底层API播放wav文件的方法
2017/08/11 Python
Python探索之自定义实现线程池
2017/10/27 Python
python实现简单多人聊天室
2018/12/11 Python
python日志logging模块使用方法分析
2019/05/23 Python
Python批量查询关键词微信指数实例方法
2019/06/27 Python
PyQt5 如何让界面和逻辑分离的方法
2020/03/24 Python
CSS3实现可关闭的下拉手风琴菜单效果
2015/08/31 HTML / CSS
医学专业毕业生个人的求职信
2013/12/04 职场文书
成功的酒店创业计划书
2013/12/27 职场文书
学子宴答谢词
2014/01/25 职场文书
国贸专业自荐信范文
2014/03/02 职场文书
企业负责人任命书
2014/06/05 职场文书
迎七一演讲稿
2014/09/12 职场文书
授权委托书公证
2014/09/14 职场文书
社区活动总结范文
2015/05/07 职场文书
2015最新婚礼司仪主持词
2015/06/30 职场文书
2015年市场营销工作总结
2015/07/23 职场文书
业务员管理制度范本
2015/08/06 职场文书
导游词之南昌滕王阁
2019/11/29 职场文书