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

作者:mdxy-dxy 时间:2023-08-01 05:06:38 

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

服务端:

#!/usr/bin/env python#coding:utf8 import socket,selectdef 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:utf8import 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,socket,聊天室
0
投稿

猜你喜欢

  • MySQL用户权限设置保护数据库安全

    2024-01-16 09:03:07
  • 不安全的js写法

    2009-09-16 14:26:00
  • 基于python3 类的属性、方法、封装、继承实例讲解

    2022-12-09 17:54:02
  • Python的mysql数据库的更新如何实现

    2024-01-28 13:43:12
  • python实现xml转json文件的示例代码

    2023-09-29 23:52:50
  • Win10下python3.5和python2.7环境变量配置教程

    2021-08-31 10:40:23
  • Python混合使用同步和异步函数的方法

    2021-07-19 05:01:05
  • Python对HTML转义字符进行反转义的实现方法

    2022-07-27 08:44:34
  • Python基于内置库pytesseract实现图片验证码识别功能

    2022-05-26 07:40:53
  • 超酷的js图片轮播渐变效果

    2007-10-10 20:45:00
  • 浅谈javascript的分号[译]

    2009-12-13 10:34:00
  • 一文读懂python Scrapy爬虫框架

    2021-01-31 10:08:31
  • Python中使用双下划线防止类属性被覆盖问题

    2021-05-04 04:02:44
  • 不支持RSS,如何跟踪网站的内容更新?

    2008-09-08 12:38:00
  • python神经网络使用Keras进行模型的保存与读取

    2023-04-15 06:53:34
  • Python类绑定方法及非绑定方法实例解析

    2022-08-10 11:36:38
  • 解析SQLServer获取Excel中所有Sheet的方法

    2024-01-18 15:11:26
  • 利用XSLT把ADO记录集转换成XML

    2008-09-05 17:12:00
  • MHTML在ie7/vista bug 解决方案

    2010-02-01 12:42:00
  • oracle 安装与SQLPLUS简单用法

    2009-06-10 17:49:00
  • asp之家 网络编程 m.aspxhome.com