前言
今天是周一,有点疲惫
0、Scoket模块的一些常用函数以及使用流程:
0-1、Scoket模块的一些常用函数
Python 的 socket 模块提供了与网络编程相关的基本功能。使用 socket 模块,你可以轻松地创建和操作网络套接字(sockets)以进行网络通信。下面是 socket 模块的一些常用函数和方法:
- socket.socket():创建一个套接字对象
- socket.bind(address):绑定套接字到一个特定的地址和端口
- socket.listen(backlog):开始监听连接,backlog 指定等待连接的最大数量
- socket.accept():接受客户端连接,并返回一个新的套接字对象以便在服务器和客户端之间进行通信
- socket.connect(address):连接到指定地址和端口的服务器
- socket.recv(bufsize):从套接字接收数据,指定缓冲区大小
- socket.send(bytes):发送数据到套接字
- socket.close():关闭套接字连接
使用 socket 模块,你可以创建 TCP 或 UDP 的套接字,根据需要配置套接字选项,使用不同的传输协议和端口号等等。使用 socket 模块可以构建各种网络应用程序,例如基于套接字的 Web 服务器、聊天室、文件传输程序等。
0-2、使用流程
当你需要编写一个网络应用程序时,你可能需要使用 socket 模块来完成以下操作:
- 创建套接字对象:使用 socket.socket() 函数创建一个套接字对象。在创建套接字时,你需要指定使用哪种传输协议(如 TCP 或 UDP)以及套接字的类型(如面向流的套接字或面向消息的套接字)。
- 绑定套接字到一个地址和端口:使用 socket.bind() 函数将套接字绑定到一个特定的地址和端口。当你需要创建一个服务器应用程序时,你需要在服务器上的某个地址和端口上侦听客户端连接请求。
- 开始监听连接:使用 socket.listen() 函数开始监听客户端连接请求。在此期间,服务器将等待客户端连接请求并在客户端连接请求到达时接受连接请求并返回一个新的套接字对象。
- 接受客户端连接并返回新的套接字对象:使用 socket.accept() 函数接受客户端连接,并返回一个新的套接字对象以便在服务器和客户端之间进行通信。在此过程中,服务器将阻塞并等待客户端连接请求到达。
- 发送和接收数据:使用 socket.send() 和 socket.recv() 函数发送和接收数据。发送数据时,你需要将数据编码为字节串(bytes)类型。接收数据时,你需要指定要接收的数据大小并将其解码为相应的格式。
- 关闭连接:使用 socket.close() 函数关闭套接字连接。
- 除此之外,还可以使用 socket 模块提供的其他函数和方法来控制套接字选项,设置超时时间等等。在使用 socket 模块时,需要注意处理网络异常和错误,例如连接中断、连接超时、网络故障等等。
下边为使用Socket的示例:
一、服务器端
import socket IP = ip地址 PORT = 端口号 BUFLEN = 1024 # 初始化Scoket,获取tcp/ip套接字。 listenSocket = socket.socket(socket.AF_INET,socket.SOCK_STREAM) # 与端口进行绑定 # IP = socket.gethostname() listenSocket.bind((IP,PORT)) # 对端口进行监听 # 5表示操作系统可以挂起的最大连接数量。 listenSocket.listen(5) print('服务端启动成功','在',PORT,'端等待客户连接') # 调用accept进行阻塞,之后等待客户端连接,客户端发送数据请求,服务器端接受并且处理请求。 dataSocket,addr = listenSocket.accept() print('接收一个客户端连接:',addr) while True: # 设置可以接受的最大数据值。 recved = dataSocket.recv(BUFLEN) # 如果超出最大范围,则break中断。 if not recved: break info = recved.decode() print('收到客户端消息',info) dataSocket.send(info.encode()) # 关闭阻塞,关闭套接字。 dataSocket.close() listenSocket.close()
二、客户端
import socket Port = 端口号 IP = ip地址 phone = socket.socket(socket.AF_INET,socket.SOCK_STREAM) # IP = socket.gethostname() # 主动初始化TCP服务连接 phone.connect((IP, Port)) # 拨通电话 # 发消息 # 发送TCP数据,将string中的数据发送到连接的套接字。 phone.send('hello'.encode('utf-8')) back_msg = phone.recv(1024) print(back_msg) phone.close()
总结
想念海边,想去过夏天了!