本文实例为大家分享了Python socket实现简单聊天室的具体代码,供大家参考,具体内容如下
服务端使用了select模块,实现了对多个socket的监控。客户端由于select在Windows下只能对socket使用,所以使用了多线程来实现对客户端输入和socket连接的同时监控。注意这里的socket设置为了非阻塞。这样就实现了在一个线程中同时进行socket的接收和发送。
服务器代码:
# -*- coding: utf-8 -*- import socket,select connection_list = [] host = '' port = 10001 def board_cast(sock,message): for socket in connection_list: if socket != server_sock and socket != sock: try: socket.send(message) except: socket.close() print str(socket.getpeername())+' is offline' connection_list.remove(socket) server_sock = socket.socket(socket.AF_INET,socket.SOCK_STREAM) server_sock.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1) server_sock.setblocking(0) server_sock.bind((host,port)) server_sock.listen(10) connection_list.append(server_sock) while 1: readable,writable,error = select.select(connection_list,[],[]) for sock in readable: if sock == server_sock: connection,connection_add = sock.accept() message = str(connection_add)+'enter room' board_cast(connection,message) print connection_add,'%s connect' connection_list.append(connection) else: try: date = sock.recv(1024) print date board_cast(sock,'('+str(sock.getpeername())+') :'+date) except: message2 = str(sock.getpeername())+ 'is offline' board_cast(sock,message2) print str(sock.getpeername())+ ' is offline' sock.close() connection_list.remove(sock) continue
客户端代码:
# -*- coding: utf-8 -*- import socket,threading,time flag = 0 date = '' lock = threading.Lock() host = 'localhost' port = 10001 client_sock = socket.socket(socket.AF_INET,socket.SOCK_STREAM) client_sock.setblocking(0) class Mythread1(threading.Thread): def __init__(self): threading.Thread.__init__(self) def run(self): global flag, date while 1: date = raw_input() if len(date): lock.acquire() flag = 1 lock.release() class Mythread2(threading.Thread): def __init__(self): threading.Thread.__init__(self) def run(self): global flag global date while 1: try: buf = client_sock.recv(1024) if len(buf): print buf except: pass if flag: try: client_sock.send(date) except socket.error, e: print e lock.acquire() flag = 0 lock.release() try: client_sock.connect((host,port)) print"连接成功" except socket.error,e: print e t1 = Mythread1() t2 = Mythread2() t1.start() t2.start()
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持小牛知识库。
本文向大家介绍python实现简单多人聊天室,包括了python实现简单多人聊天室的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了python实现多人聊天室的具体代码,供大家参考,具体内容如下 刚开始学习python,写了一个聊天室练练手。 Server.py client.py 运行时先启动服务端。进入聊天室先起一个昵称。服务端会向客户端发送当前聊天室内聊天人的列表。一个客户端发出
本文向大家介绍Node.js实现简单聊天服务器,包括了Node.js实现简单聊天服务器的使用技巧和注意事项,需要的朋友参考一下 使用Nodejs是如此简单的实现了一个简单的聊天服务器 实现代码如下: 使用过程就是: 启动js 连接方式:telnet
本文向大家介绍Python基于Socket实现简单聊天室,包括了Python基于Socket实现简单聊天室的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了Python基于Socket实现简单聊天室,供大家参考,具体内容如下 服务端 客户端 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。
本文向大家介绍Android实现简单C/S聊天室应用,包括了Android实现简单C/S聊天室应用的使用技巧和注意事项,需要的朋友参考一下 Android的网络应用:简单的C/S聊天室,供大家参考,具体内容如下 服务器端:提供两个类 创建ServerSocket监听的主类:MyServer.java 负责处理每个Socket通信的线程类:ServerThread.java 客户端:是一个Andro
本文向大家介绍PHP聊天室简单实现方法详解,包括了PHP聊天室简单实现方法详解的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了PHP聊天室简单实现方法。分享给大家供大家参考,具体如下: 用户 => 客服 (先把信息入库,然后通过ob+长连接不断从数据库查询数据发送给客服) 客服 => 用户 (先接收用户信息,然后把回复信息入库,最后通过ajax轮询不断请求数据,显示到用户聊天界面) 【注意
本文向大家介绍微信小程序 聊天室简单实现,包括了微信小程序 聊天室简单实现的使用技巧和注意事项,需要的朋友参考一下 微信小程序 聊天室简单实现 utils文件夹下websoctet.js文件 具体页面.js文件内容: 下面方法很好玩,因为使用的服务器 是开源的PHP服务器,所以微信小程序接收到的聊天室中文内容是ASCII编码,所以经过此方法可以转换。 感谢阅读,希望能帮助到大家,谢谢大家对本站的支