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

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
, socket
聊天室
python socket聊天室、websocket实现聊天室、socket实现聊天室、php socket实现聊天室、c socket实现聊天室,以便于您获取更多的相关知识。

时间: 2024-08-13 22:06:12

Python socket C/S结构的聊天室应用实现_python的相关文章

Python实现的使用telnet登陆聊天室实例

  本文实例讲述了Python实现的使用telnet登陆聊天室.分享给大家供大家参考.具体如下: 前久在家学习Python的时候写的一个简单的聊天室,可以使用telnet来登陆. 遗憾的是现在对中文的支持很差,英文聊天倒是没什么问题了. 功能很简单的,应该没有你想象的那么强大,但是你如果有兴趣的话可以试试的. 另外,让我惊奇的是它可以在Android的平板上运行SL4A的Python解释器上运行(需要稍微改几句代码,貌似是编码的那个地方,我记不清了). 现在这个是可以在PC上跑起来的. 废话不多

.net做的B/S结构的聊天室

问题描述 谁有.net做的B/S结构的聊天室,谢谢了 解决方案 解决方案二:网上多的是,baidu一下会很多,www.codeproject上也有下.解决方案三:zlchat是一个网页视频会议软件,使用它你可以与远方的亲朋好友视频聊天,也可以用于公司远程视频会议,远程视频教学.zlchat没有使用任何activex插件,不用安装客户端,打开网页就可能使用.1.不限制房间,用户数2.每个房间最高可达50人,一台服务器最高可支持1000人同时在线3.普通ADSL可以同时看10路用户视频4.费版本永远

asp.net利用socket实现简单多对多聊天室源码

因为在传输的时候服务器与客户端只以字节流的方式来完成数据的传输,那么我们就可以在不同的数据数里加一个标志.                   图为httpwatch捕获的http报文   这种思想来源自HTTP请求与响应报文,模拟HTTP请求与响应,我自己规定字节流里第一个字节{0:文字,1:文件,2:震动}.   但是这个时候有一个坏处,如果标识后期又要加一个功能,比如要求用户可能控制不同的文字大小,不同的文字与颜色.那样标志就越来越多了,传输的报文也越来越难封装和解析了(中间多了定义标识,

Python Socket 编程——聊天室示例程序

原文:Python Socket 编程--聊天室示例程序 上一篇 我们学习了简单的 Python TCP Socket 编程,通过分别写服务端和客户端的代码了解基本的 Python Socket 编程模型.本文再通过一个例子来加强一下对 Socket 编程的理解. 聊天室程序需求 我们要实现的是简单的聊天室的例子,就是允许多个人同时一起聊天,每个人发送的消息所有人都能接收到,类似于 QQ 群的功能,而不是点对点的 QQ 好友之间的聊天.如下图: 图来自:http://www.ibm.com/de

聊天室服务分析设计

如果你需要写一个简单的聊天室的服务,那么我想很多网上的demo都可以直接拿来用.但是如果你要做的是给线上百万甚至千万级用户用的服务,那么,整个结构和聊天室Demo是必然不一样的.本文就从设计一个大用户量的聊天室服务的角度出发来思考. 分布式? 首先用户量大必然先考虑的问题是服务是单进程还是多进程,单机器还是多机器,单进程代表的是单机上跑一个服务,单机器代表的是单机上跑一个或者多个服务,这两种方案都是不可行的.理由是考虑下面几个方面: 1 单进程或单机器对机器性能要求较高:由于一台机器上的一个进程

Android使用多线程进行网络聊天室通信

TCP/IP通信协议是一种可靠的网络协议,它在通信的两端各建立一个Socket,从而在通信的两端之间形成网络虚拟链路.一旦建立了虚拟的网络链路,两端的程序就可以通过虚拟链路进行通信了.Java对基于TCP协议的网络通信提供了良好的封装,Java使用Socket对象来代表两端通信接口,并通过Socket产生IO流来进行网络通信. 下面的程序Demo是实现一个简单的C/S聊天室的应用,每个客户端该包含两条线程:一条负责生成主界面,响应用户动作,并将用户输入的数据写入Socket对应的输出流中:另一条

多线程-c++聊天室,怎样实现多客户端

问题描述 c++聊天室,怎样实现多客户端 我用c++写一个聊天室,目前只能将信息发送给服务器,服务器在发回给自己.怎样实现发送消息给服务器,服务器在转发给别人. 解决方案 别的客户端也登陆服务器,创建连接.把所有连接做成一个数组.这里发来的消息,服务器循环判断找到对方的连接,发送.再不会,找个例子看下.google下很多. 解决方案二: 服务器收到消息后,可以维护客户端的连接,然后根据需要把对应的数据发送给对应的连接 解决方案三: 服务器端在recv后,再像客户端那样send一下就行了啊,服务器

socket-java如何使用Socket实现多线程多人聊天

问题描述 java如何使用Socket实现多线程多人聊天 java如何使用Socket实现多线程多人聊天,提供源码最好了.希望说详细一点. 解决方案 简单的聊天室: ========================================================================================== server: import java.net.*; import java.io.*; import java.util.*; public clas

Node.js中使用socket创建私聊和公聊聊天室_node.js

先给大家展示效果图: 在上篇文章给大家介绍使用Angular和Nodejs.socket.io搭建聊天室及多人聊天室,本文继续介绍Node.js中使用socket创建私聊和公聊聊天室,具体详情请看下文吧. nodejs的应用中,关于socket应该是比较出彩的了,socket.io在github上有几万人的star,它的成功应该是不输于express的,为了方便了解整个socket.io的使用. 例子请点击http://chat.lovewebgames.com/ 源码下载https://git