本文实例为大家分享了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()
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
暂无评论...
稳了!魔兽国服回归的3条重磅消息!官宣时间再确认!
昨天有一位朋友在大神群里分享,自己亚服账号被封号之后居然弹出了国服的封号信息对话框。
这里面让他访问的是一个国服的战网网址,com.cn和后面的zh都非常明白地表明这就是国服战网。
而他在复制这个网址并且进行登录之后,确实是网易的网址,也就是我们熟悉的停服之后国服发布的暴雪游戏产品运营到期开放退款的说明。这是一件比较奇怪的事情,因为以前都没有出现这样的情况,现在突然提示跳转到国服战网的网址,是不是说明了简体中文客户端已经开始进行更新了呢?
更新日志
2024年11月26日
2024年11月26日
- 凤飞飞《我们的主题曲》飞跃制作[正版原抓WAV+CUE]
- 刘嘉亮《亮情歌2》[WAV+CUE][1G]
- 红馆40·谭咏麟《歌者恋歌浓情30年演唱会》3CD[低速原抓WAV+CUE][1.8G]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[320K/MP3][193.25MB]
- 【轻音乐】曼托凡尼乐团《精选辑》2CD.1998[FLAC+CUE整轨]
- 邝美云《心中有爱》1989年香港DMIJP版1MTO东芝首版[WAV+CUE]
- 群星《情叹-发烧女声DSD》天籁女声发烧碟[WAV+CUE]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[FLAC/分轨][748.03MB]
- 理想混蛋《Origin Sessions》[320K/MP3][37.47MB]
- 公馆青少年《我其实一点都不酷》[320K/MP3][78.78MB]
- 群星《情叹-发烧男声DSD》最值得珍藏的完美男声[WAV+CUE]
- 群星《国韵飘香·贵妃醉酒HQCD黑胶王》2CD[WAV]
- 卫兰《DAUGHTER》【低速原抓WAV+CUE】
- 公馆青少年《我其实一点都不酷》[FLAC/分轨][398.22MB]
- ZWEI《迟暮的花 (Explicit)》[320K/MP3][57.16MB]