网络编程中套接字(socket)介绍(Python示例)
网络编程中套接字(socket)介绍(Python示例)
网络编程就是同一计算机的进程间或者不同的联网计算机之间的通信(交换数据)。
那么,这两台计算机之间用什么传输数据呢?首先你肯定先需要物理连接嘛。
在此基础上,只需要考虑如何编写数据传输程序。
套接字是一种抽象的概念,它表示一个端点,用于在网络中传输数据。套接字可以用于实现各种网络协议,如 TCP/IP、UDP 等。
在套接字中,有两个主要的概念:
服务器套接字(server socket):用于接收来自客户端的连接请求,并建立与客户端的连接。服务器套接字通常在一个特定的端口上等待客户端的连接。
客户端套接字(client socket):用于向服务器发送连接请求,并与服务器建立连接。客户端套接字通常在随机选择的端口上发起连接。
套接字通过使用 IP 地址和端口号来唯一标识其所在的计算机和端点。在网络编程中,程序员通常使用套接字来编写服务器和客户端程序,以实现数据的传输和通信。套接字在计算机网络、Internet 编程等领域中有着广泛的应用。
看似很麻烦,但实际上这点不用愁,因为和开发语言与操作系统已经提供了socket。即使对网络数据传输的原理不太熟悉,我们也能通过 socket 来编程。
【Python之socket 官方文档 https://docs.python.org/zh-cn/3/library/socket.html 】
服务器端Python源码文件:
import socket
# 创建套接字
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 绑定地址和端口
server_address = ('localhost', 8888)
server_socket.bind(server_address)
# 监听连接
server_socket.listen(5)
print('等待客户端连接...')
while True:
# 接受连接
client_socket, client_address = server_socket.accept()
print('接受来自 {} 的连接'.format(client_address))
try:
# 发送数据
message = '欢迎访问服务器!'
client_socket.sendall(message.encode("utf8"))
# 接收数据
data = client_socket.recv(1024).decode('utf-8')
print('收到来自客户端的数据:', data)
finally:
# 关闭连接
client_socket.close()
客户端Python源码文件:
import socket
# 创建套接字
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 连接服务器
server_address = ('localhost', 8888)
client_socket.connect(server_address)
try:
# 接收数据
data = client_socket.recv(1024)
print('收到来自服务器的数据:', data.decode("utf8"))
# 发送数据
message = '这是客户端发送的数据'
client_socket.sendall(message.encode("utf8"))
finally:
# 关闭套接字
client_socket.close()
特别提示:在运行客户端代码之前,请确保服务器端代码已运行,并且已经监听连接。不要再在一个python的IDLE运行服务器端代码和客户端代码,否则会出现出现如下错误:
ConnectionRefusedError: [WinError 10061] 由于目标计算机积极拒绝,无法连接。
如何正确运行?
应打开一个IDLE,运行服务器代码。
再打开一个IDLE,运行客户端代码。
这样才是运行两个进程,进程间进行通信。
另外,防火墙的防护也可能造成上述错误。