温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Python中socket如何实现简单聊天室

发布时间:2021-08-06 14:39:02 来源:亿速云 阅读:179 作者:小新 栏目:开发技术

这篇文章将为大家详细讲解有关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中socket如何实现简单聊天室”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI