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

 更新时间:2014年11月30日 21:48:29   投稿:mdxy-dxy  
这篇文章主要介绍了Python socket C/S结构的聊天室应用实现,需要的朋友可以参考下

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实现XML文件解析的示例代码

    Python实现XML文件解析的示例代码

    本篇文章主要介绍了Python实现XML文件解析的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-02-02
  • Python 多线程爬取案例

    Python 多线程爬取案例

    这篇文章主要介绍了Python 多线程爬取案例,爬虫属于I/O密集型的程序,所以使用多线程可以大大提高爬取效率,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-08-08
  • Django model.py表单设置默认值允许为空的操作

    Django model.py表单设置默认值允许为空的操作

    这篇文章主要介绍了Django model.py表单设置默认值允许为空的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-05-05
  • Python decimal模块的使用示例详解

    Python decimal模块的使用示例详解

    decimal 模块decimal意思为十进制,这个模块提供了十进制浮点运算支持,本篇文章主要给大家讲解Python decimal模块的使用,需要的朋友可以参考下
    2023-03-03
  • Python单个项目列表转换为整数的实现

    Python单个项目列表转换为整数的实现

    本文主要介绍了Python单个项目列表转换为整数的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-02-02
  • Python实现网站注册验证码生成类

    Python实现网站注册验证码生成类

    这篇文章主要为大家详细介绍了Python实现网站注册验证码生成类,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-06-06
  • Python模拟简单电梯调度算法示例

    Python模拟简单电梯调度算法示例

    这篇文章主要介绍了Python模拟简单电梯调度算法,涉及Python线程、队列、时间延迟等相关操作技巧,需要的朋友可以参考下
    2018-08-08
  • Python批量实现word中查找关键字的示例代码

    Python批量实现word中查找关键字的示例代码

    本文主要介绍了Python批量实现word中查找关键字的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-07-07
  • pyqt5对用qt designer设计的窗体实现弹出子窗口的示例

    pyqt5对用qt designer设计的窗体实现弹出子窗口的示例

    今天小编就为大家分享一篇pyqt5对用qt designer设计的窗体实现弹出子窗口的示例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-06-06
  • Python中endswith()函数的基本使用

    Python中endswith()函数的基本使用

    这篇文章主要介绍了Python中endswith()函数的基本使用,是Python学习当中的基础知识,该函数可以用来检测文件类型,需要的朋友可以参考下
    2015-04-04

最新评论