Python 网络编程(聊天室的基础实现)

2021/8/15 11:05:48

本文主要是介绍Python 网络编程(聊天室的基础实现),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

运用到的知识:python socket使用,tcp/ip协议的理解,python面向对象编程, python多线程
实现的原理图:

实现的代码:
# -*- coding = utf-8 -*-
# @Time : 2021/8/14 11:49
# @Author : 刘卓文
# @File : 聊天室.py
# @Software : PyCharm

import socket
import threading
import datetime
class ChatServer:
      def __init__(self,ip,port):
          self.addr =(ip,port) #定义addr存放ip和端口
          self.sock = socket.socket()  #套接字赋一个0.0.0.0 0的新值,
          self.cilents = {} #创建一个字典容器
      def start(self):
          self.sock.bind(self.addr)   #绑定ip和端口,直是赋值,但是还没有绑定
          self.sock.listen()    #绑定已赋值的套接字
          threading.Thread(target=self.accept,name='accept').start()
      def accept(self):
          while True:
             s,raddr = self.sock.accept()   #阻塞1,等待对面的端口连接,accept赋值自己的端口,以及对端raddr地址和端口号
             self.cilents[raddr] = s    #装填cilents,让key = raddr , values = s
             threading.Thread(target=self.recv,name='recv',args=(s, )).start()
      def recv(self,sock):
          while True:
        #服务器通过recv方法来接受数据
              data = sock.recv(1024)
              if data.decode()=="quit":
                  self.cilents.pop(sock.getpeername())
                  sock.close()
                  break
              msg = "{} {} {}".format(sock.getpeername(),datetime.datetime.now().strftime("%Y/%m/%d-%H:%M:%S"),data.decode()).encode()
        #服务器通过send发送响应
              for s in self.cilents.values():
                  s.send(msg)  #给现存的每一个端口放送数据
      def stop(self):
          for s in self.clients.values:
              s.close()
          self.sock.close()

cs = ChatServer('127.0.0.1',9999)
cs.start()


这篇关于Python 网络编程(聊天室的基础实现)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程