版本环境
Python = 3.10
问题描述
客户端
Client.py
import socket
def main():
# 创建 socket 对象
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 指定服务器IP地址和端口号
server_host = '172.16.3.XXX'
server_port = 9999
# 连接到服务器
client_socket.connect((server_host, server_port))
# 发送数据
message = "你好,服务器!"
client_socket.sendall(message.encode('utf-8'))
# 接收小于 1024 字节的数据
data = client_socket.recv(1024).decode('utf-8')
print(f"从服务器收到消息: {' '}")
# 关闭连接
client_socket.close()
if __name__ == '__main__':
main()
服务器端
Server.py
import socket
def main():
# 创建 socket 对象
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 绑定IP地址和端口号
host = '172.16.3.XXX'
port = 9999
server_socket.bind((host, port))
# 设置最大连接数
server_socket.listen(5)
# print(f"服务器正在监听 {host}:{port}")
while True:
# 等待客户端连接
client_socket, addr = server_socket.accept()
# print(f"连接地址: {addr}")
try:
# 接收客户端消息
data = client_socket.recv(1024).decode('utf-8')
if data:
# print(f"从连接 {addr} 收到消息: {data}")
# 发送响应
response = f"服务器收到: {data.upper()}"
client_socket.sendall(response.encode('utf-8'))
else:
# print(f"客户端 {addr} 断开了连接,没有发送任何数据")
pass
finally:
# 关闭连接
client_socket.close()
if __name__ == '__main__':
main()
运行结果为:
Client.py运行正常,但是无法接收到服务器端返回的内容,而Server.py运行内容一片空白
解决方案:
经排查,原因是服务器端防火墙开启,没有开启对应端口的许可
在服务器端运行:
更新apt:
sudo apt update
下载防火墙管理器
sudo apt install ufw
开启9999端口的权限(如果你设置的是其他端口号,请改成其他的端口号)
sudo ufw allow 9999/tcp
运行结果:
Rule added
Rule added (v6)
验证结果:
sudo ufw status
结果显示为
To Action From
-- ------ ----
22 ALLOW Anywhere
9999/tcp ALLOW Anywhere
22 (v6) ALLOW Anywhere (v6)
9999/tcp (v6) ALLOW Anywhere (v6)
9999端口号许可成功,运行代码交互成功