import socket
# 创建socket对象,AF_INET表示使用IPv4协议,SOCK_STREAM表示使用TCP协议
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 获取本地主机名
host = socket.gethostname()
port = 12345 # 监听的端口号
# 绑定地址(主机名、端口号)到socket
server_socket.bind((host, port))
# 开始监听,参数5表示允许的最大连接数
server_socket.listen(5)
print(f"Server is listening on {host}:{port}")
while True:
# 接受客户端连接,返回一个新的socket对象和客户端地址
client_socket, addr = server_socket.accept()
print(f"Got a connection from {addr}")
# 接收客户端发送的数据,1024表示缓冲区大小
data = client_socket.recv(1024)
print(f"Received message: {data.decode('utf-8')}")
# 回显响应消息给客户端
response = "Message received successfully"
client_socket.send(response.encode('utf-8'))
# 关闭客户端socket连接
client_socket.close()
- 创建socket对象:
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
:使用socket.socket()
函数创建一个socket对象。AF_INET
指定使用IPv4地址族,SOCK_STREAM
指定使用TCP协议。这一步初始化了服务器用于网络通信的基本对象。
- 获取主机名和定义端口号:
host = socket.gethostname()
:获取本地主机名,用于后续绑定地址。
port = 12345
:定义服务器要监听的端口号。端口号是TCP/IP协议中用于区分不同应用程序的标识。
- 绑定地址到socket:
server_socket.bind((host, port))
:将服务器的socket绑定到指定的主机名和端口号。这一步使得服务器能够在指定的地址上接收来自客户端的连接请求。
- 开始监听:
server_socket.listen(5)
:让服务器开始监听传入的连接请求。参数5
表示在拒绝新的连接请求之前,操作系统可以挂起的最大连接数。
- 接受客户端连接:
client_socket, addr = server_socket.accept()
:在while True
循环中,server_socket.accept()
函数会阻塞,直到有客户端连接到服务器。当有连接时,它返回一个新的socket对象(client_socket
)用于与该客户端进行通信,以及客户端的地址(addr
)。
- 接收和发送数据:
data = client_socket.recv(1024)
:使用recv
方法从客户端接收数据,1024
是缓冲区大小,它指定了一次最多接收多少字节的数据。接收到的数据是字节类型,需要使用decode('utf - 8')
方法解码为字符串。
response = "Message received successfully"
:定义要回显给客户端的响应消息。
client_socket.send(response.encode('utf-8'))
:使用send
方法将响应消息发送回客户端。在发送之前,需要将字符串编码为字节类型。
- 关闭客户端socket连接:
client_socket.close()
:完成与客户端的通信后,关闭客户端的socket连接,释放资源。