Python的`socket`模块是一个用于网络通信的内置标准库,它允许开发者使用标准的BSD Sockets API进行网络编程。以下是`socket`模块的主要功能和用法:
基本功能
创建套接字 :使用`socket.socket(family, type, protocol)`创建套接字,其中`family`指定地址族(如`AF_INET`表示IPv4),`type`指定套接字类型(如`SOCK_STREAM`表示TCP,`SOCK_DGRAM`表示UDP)。绑定地址:
使用`socket.bind((ip, port))`将套接字绑定到特定的IP地址和端口。
监听连接:
使用`socket.listen(backlog)`开始监听连接请求,`backlog`指定等待连接的最大数量。
接受连接:
使用`socket.accept()`接受客户端的连接请求,返回一个新的套接字对象和客户端地址。
发送和接收数据
TCP:使用`socket.sendall(data)`发送数据,使用`socket.recv(buffer_size)`接收数据。
UDP:使用`socket.sendto(data, address)`发送数据,使用`socket.recvfrom(buffer_size)`接收数据。
关闭套接字:
使用`socket.close()`关闭套接字。
面向连接和无连接
面向连接:使用TCP协议,数据传输前需要建立连接,如上述的`socket.connect()`。
无连接:使用UDP协议,数据传输前不需要建立连接。
异常处理
在使用`socket`模块时,可能会遇到各种异常情况,如连接失败、超时等,需要适当处理这些异常。
设计模式
`socket`模块在设计模式中充当门面模式,隐藏了底层的TCP/IP协议族,提供了一组简单的接口供开发者使用。
应用场景
客户端和服务器:`socket`模块可用于创建客户端和服务器程序,实现两者之间的通信。
数据传输:适用于传输大量数据(如文件传输)和少量数据(如DNS查询)。
网络编程:可用于实现各种网络应用,如Web服务器、聊天服务器、文件传输工具等。
示例代码
import socket
创建TCP套接字
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
绑定地址和端口
server_socket.bind(('127.0.0.1', 12345))
开始监听
server_socket.listen(5)
while True:
接受客户端连接
client_socket, client_address = server_socket.accept()
print(f"连接来自:{client_address}")
接收数据
data = client_socket.recv(1024)
print(f"收到数据:{data.decode()}")
发送响应
client_socket.sendall(b"Hello from server!")
关闭连接
client_socket.close()
关闭服务器套接字
server_socket.close()
以上是Python `socket`模块的基本用法和功能。您可以根据需要进一步扩展和定制网络通信程序