Python网络编程

本文介绍了Python的网络编程,包括使用socket进行TCP和UDP聊天室的实现。详细阐述了TCP聊天室的设计,如服务器如何处理多个连接,客户端断开连接的处理,以及客户端和服务器端的代码实现。同时,对于UDP聊天室,讨论了阻塞处理、心跳机制和客户端关闭的处理。最后提到了SocketServer模块,用于简化网络服务器开发。
摘要由CSDN通过智能技术生成

Python 提供了两个级别访问的网络服务。:

  • 低级别的网络服务支持基本的 socket,,可以访问底层操作系统Socket接口的方法。
  • 高级别的网络服务模块 socketserver, 可以简化网络服务器的开发。

socket

查看socket类的帮助如下

import socket  # 导入socket模块
>>> help(socket.socket)

重点关注初始化函数:

__init__(self, family=<AddressFamily.AF_INET: 2>, type=<SocketKind.SOCK_STREAM: 1>, proto=0, fileno=None)
  • family:网络协议簇,默认值为AF_INET
  • type:套接字的类型,根据是面向连接的还是非连接分为SOCK_STREAMSOCK_DGRAM
  • proto:套接字协议,一般默认为0,表示
  • fileno:套接字的int型的文件描述符

下面实现一个TCP聊天室和一个UDP聊天室

TCP聊天室

概要设计

获取多个连接的处理

开启accept线程,执行accept操作开始阻塞,有客户端连接时,再开启一个线程recv进行数据接收的处理。然后accept线程继续阻塞,等待后续客户端的连接。

阻塞的处理

服务端处理客户端的连接时,有两处存在阻塞,分别是:

  • 获取连接时,socket.accept()会阻塞
  • 每一个建立成功的连接在获取数据时,socket.recv(1024)

因此这两处都需要开启线程单独处理,否则会阻塞主线程。

客户端主动断开的处理

客户端主动断开时,如果不通知服务端,那么服务端上保存的客户端连接不会被清理,这是不合理的。因此客户端主动断开时,我们在应用层约定,客户端推出前需要发送/quit指令到服务端上,然后有服务端关闭socket。

TCP聊天室-server

聊天室的server端主要是监听端口,处理来自client端的连接,并且分发数据到所有的client端

代码

import socket
import threading


class TcpChatServer:
    def __init__(self, ip='192.168.110.13', port=9001):
        self.ip = ip
        self.port = port
        self.clients = {}
        self.sock = socket.socket(family=socket.AF_INET, type=socket.SOCK_STREAM)
        self.event = threading.Event()

    def recv(self, so, ip ,port
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值