# socketserver
"""
1、类式调用,实现socket功能
2、server端:服务端,监听指定端口,提供服务
3、client端:客户端,连接服务端,获取服务
"""
服务端
# 引入模块
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()
客户端
# 引入模块
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()
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。