使用Python的socket库实现两台服务器TCP协议的数据发送和接收

在Linux环境下,两台服务器之间实现TCP协议的数据发送和接收,可以使用Python的socket库或直接用C语言编写。这里给出一个简单的Python示例,演示如何在两台服务器间进行TCP通信。

服务器端代码 (server.py)

在一台服务器上运行以下代码:

python 复制代码
import socket

# 创建TCP/IP socket
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 绑定到地址和端口
server_address = ('0.0.0.0', 65432)  # 监听所有可用的接口
sock.bind(server_address)

# 开始监听
sock.listen(1)
print('等待连接...')
connection, client_address = sock.accept()

try:
    print(f'连接来自 {client_address}')
    
    while True:
        data = connection.recv(1024)
        if data:
            print(f'接收到: {data.decode()}')
            connection.sendall(data)  # 将数据回传给客户端
        else:
            break
finally:
    connection.close()

客户端代码 (client.py)

在另一台服务器上运行以下代码:

python 复制代码
import socket

# 创建TCP/IP socket
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 连接到服务器
server_address = ('<服务器_IP>', 65432)  # 替换为服务器的IP地址
sock.connect(server_address)

try:
    message = 'Hello, Server!'
    print(f'发送: {message}')
    sock.sendall(message.encode())

    # 接收响应
    data = sock.recv(1024)
    print(f'接收到: {data.decode()}')
finally:
    sock.close()

使用步骤

  1. **在服务器端**:将`server.py`保存并在目标服务器上运行(例如:`python3 server.py`)。

  2. **在客户端**:将`client.py`保存并在另一台服务器上运行,确保替换`<服务器_IP>`为服务器的实际IP地址(例如:`python3 client.py`)。

  3. **测试**:客户端会向服务器发送消息,服务器接收并返回相同的消息。

执行结果:

注意事项

  • 确保防火墙允许相应的端口(如65432)通过。

  • 可以根据需要调整缓冲区大小和数据处理逻辑。

  • 以上代码为基本示例,实际应用中可能需要添加错误处理及更复杂的逻辑。

如果出现客户端启动失败

root@localhost tools\]# python3 client.py Traceback (most recent call last): File "client.py", line 8, in \ sock.connect(server_address) OSError: \[Errno 113\] No route to host \[root@localhost tools\]# \[root@localhost tools\]# \[root@localhost tools\]# python3 client.py Traceback (most recent call last): File "client.py", line 8, in \ sock.connect(server_address) OSError: \[Errno 113\] No route to host \[root@localhost tools\]# python client.py File "client.py", line 3 SyntaxError: Non-ASCII character '\\xe5' in file client.py on line 3, but no encoding declared; see http:l for details \[root@localhost tools\]#

解决方案:

客户端、服务器 停止防火墙服务

或者排查以下原因

OSError: [Errno 113] No route to host 这个错误通常表示你的程序无法连接到指定的服务器。以下是一些可能的原因和解决方法:

  1. 检查服务器地址

    • 确保 server_address 变量包含正确的主机名或IP地址和端口号。
  2. 网络连接

    • 确认你已连接到网络。可以尝试使用命令 ping <server_address> 来检查服务器是否可达。
  3. 防火墙设置

    • 检查本地计算机或网络上的防火墙设置,确保没有阻止与服务器的连接。
    • 如果是远程服务器,确保其防火墙允许来自你的机器的连接。
  4. 服务器状态

    • 确保目标服务器处于运行状态并能够接受连接。
  5. 正确的端口

    • 确认你正在连接的端口是服务器正在监听的端口。
  6. 网络配置

    • 确保网络配置(如子网掩码和网关)正确无误。
  7. 路由器问题

    • 如果你在路由器后面,确保路由器配置正确,没有阻止连接。
  8. VPN或代理

    • 如果你使用了VPN或代理,检查它们是否影响了与服务器的连接。
  9. 尝试其他网络

    • 如果可能,尝试从不同的网络连接,以查看问题是否仍然存在。
相关推荐
Hui Baby2 分钟前
Java SPI 与 Spring SPI
java·python·spring
德迅云安全—珍珍4 分钟前
低配服务器性能不够用怎么去优化?
运维·服务器
小猪咪piggy7 分钟前
【Python】(3) 函数
开发语言·python
酣大智9 分钟前
DHCP中继配置实验
运维·网络·网络协议·tcp/ip·华为
夜鸣笙笙11 分钟前
交换最小值和最大值
python
2301_8223636016 分钟前
使用Pandas进行数据分析:从数据清洗到可视化
jvm·数据库·python
笑锝没心没肺19 分钟前
Linux Audit 系统配置介绍
linux·运维·服务器
码界奇点27 分钟前
基于Flask与OpenSSL的自签证书管理系统设计与实现
后端·python·flask·毕业设计·飞书·源代码管理
java1234_小锋38 分钟前
分享一套优质的基于Python的房屋数据分析预测系统(scikit-learn机器学习+Flask)
python·数据分析·scikit-learn
CCPC不拿奖不改名42 分钟前
RAG基础:基于LangChain 的文本分割实战+文本分块
人工智能·python·langchain·知识库·改行学it·rag·向量库