7.1 套接字(socket)
套接字(socket)是计算机之间进行通信的一种技术,它允许不同主机上的进程之间进行数据交换。在Python中,我们可以使用socket
模块来创建和使用套接字。
首先,我们需要导入socket
模块:
import socket
在网络编程中,有两种主要类型的套接字:流套接字(Stream Sockets)和数据报套接字(Datagram Sockets)。流套接字使用传输控制协议(TCP)进行通信,而数据报套接字使用用户数据报协议(UDP)进行通信。我们将主要关注TCP套接字,因为它们更常用且提供了可靠的双向通信。
创建套接字
要创建一个TCP套接字,我们可以使用socket.socket()
函数:
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
这里,socket.AF_INET
表示我们使用IPv4地址,socket.SOCK_STREAM
表示我们使用TCP协议。
绑定套接字
创建套接字后,我们需要将其绑定到一个地址和端口。这可以使用bind()
方法完成:
address = ('localhost', 12345)
s.bind(address)
这里,我们绑定了套接字到本地地址('localhost')和端口(12345)。
监听连接
在绑定套接字后,我们需要开始监听客户端的连接。我们可以使用listen()
方法来实现这一点:
s.listen(5)
这里的数字5
表示允许的最大连接数。
接受连接
当有客户端尝试连接时,我们可以使用accept()
方法来接受连接。这将返回一个新的套接字对象和客户端地址:
client_socket, client_address = s.accept()
发送和接收数据
现在我们已经建立了连接,可以使用send()
和recv()
方法发送和接收数据。例如:
data = client_socket.recv(1024) # 接收最多1024字节的数据
client_socket.send(b'Hello, client!') # 发送数据
请注意,我们需要使用字节类型的数据进行通信。
关闭套接字
通信完成后,我们需要关闭套接字以释放资源。我们可以使用close()
方法来实现这一点:
client_socket.close()
s.close()
这就是一个简单的TCP套接字服务器的基本结构。为了让您更好地理解,这里有一个完整的示例:
TCP服务器示例
import socket
def main():
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
address = ('localhost', 12345)
s.bind(address)
s.listen(5)
print("Waiting for connections...")
client_socket, client_address = s.accept()
print(f"Connected to {client_address}")
data = client_socket.recv(1024)
print(f"Received: {data}")
client_socket.send(b'Hello, client!')
client_socket.close()
s.close()
if __name__ == '__main__':
main()
这个示例展示了如何创建一个简单的TCP服务器,它接受来自客户端的连接和数据,并向客户端发送一条消息。您可以根据自己的需求修改这个示例,以实现不同的功能。
推荐阅读: