首页
学习
活动
专区
圈层
工具
发布
30 篇文章

九、python学习笔记-网络编程-socketserver

代码语言:javascript
复制
# socketserver
"""
1、类式调用,实现socket功能
2、server端:服务端,监听指定端口,提供服务
3、client端:客户端,连接服务端,获取服务
"""

服务端

代码语言:javascript
复制
# 引入模块
import socketserver

# 通过类式调用实现基于socket通信
"""
1、建立Mysocket类,父类是socketserver.BaseRequestHandler
2、重写父类方法handle
3、调用Mysocket实际上就是执行handle方法
4、serve_forever()会在会话结束后重进进入阻塞状态,等待下次连接
"""


class Mysocket(socketserver.BaseRequestHandler):

    # 重写父类方法handle
    def handle(self):
        # 获取通道信息
        conn = self.request
        # 获客户端信息
        client_address = self.client_address
        # 打印通道信息
        print(conn)
        # 打印客户端信息
        print(client_address)
        # 接收打印消息
        info = str(conn.recv(1024), encoding='utf8')
        print(info)
        # 发送消息
        conn.sendall(bytes('hello too', encoding='utf8'))
        # 关闭连接
        conn.close()


if __name__ == '__main__':
    # 实例化socket对象
    server = socketserver.ThreadingTCPServer(('127.0.0.1', 8088), Mysocket)
    # 初始化socket连接,进入等待状态
    # serve_forever()会在会话结束后重进进入阻塞状态,等待下次连接
    server.serve_forever()

客户端

代码语言:javascript
复制
# 引入模块
import socket

# 初始化(实例化)socket对象sk
sk = socket.socket()

# 定义服务器端IP端口,元组格式
address = ('127.0.0.1', 8088)

# 连接服务器
sk.connect(address)

# 信息收发
"""
1、服务端和客户端谁先发信息都可以
2、必须是一发一收,两端不能同时发消息或收消息
"""

# 发送消息
"""
1、发送信息必须是bytes类型
2、send:发送TCP数据,将string中的数据发送到连接的套接字。返回值是要发送的字节数量,该数量可能小于string的字节大小(就是有可能发送不完整)。
3、sendall:完整发送TCP数据,完整发送TCP数据。将string中的数据发送到连接的套接字,但在返回之前会尝试发送所有数据。成功返回None,失败则抛出异常。
4、客户端发送信息使用socket对象sk,服务器端使用通道conn
"""
sk.sendall(bytes('hello', encoding='utf8'))

# 接收信息
"""
1、接收可以指定一次最大接收多少字节
2、接收的信息为bytes类型
3、等待接收时,进入阻塞状态,直到信息发送过来
4、一次接收信息有大小限制,也就是说有可能一次无法全部接收,需要分多次
5、客户端接收信息使用socket对象sk,服务器端使用通道conn
"""
info = str(sk.recv(1024), encoding='utf8')
print(info)

# 关闭连接
# 客户端关闭使用socket对象sk,服务器端使用通道conn
sk.close()
下一篇
举报
领券