使用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. 尝试其他网络

    • 如果可能,尝试从不同的网络连接,以查看问题是否仍然存在。
相关推荐
Verdure陌矣1 小时前
游戏开发中 C#、Python 和 C++ 的比较
c++·python·游戏·c#
Stringzhua1 小时前
Linux多网卡组Bond0Bond1Bond4
运维·服务器·网络
HHONGQI1231 小时前
Linux 基础入门操作 前言 VIM的基本操作 2
linux·运维·服务器·vim
丰锋ff1 小时前
借助 AI 工具使用 Python 实现北京市店铺分布地理信息可视化教程
人工智能·python·信息可视化
java1234_小锋1 小时前
一周学会Pandas2 Python数据处理与分析-Pandas2二维数据结构-DataFrame
数据结构·python·pandas
王伯爵1 小时前
接入网和核心网之间的承载网详细介绍
服务器·网络·数据库
孙桂月3 小时前
Python爬取数据(二)
开发语言·python
白白糖3 小时前
组合与括号生成(回溯)
python·算法·力扣
小峰编程3 小时前
谈Linux之磁盘管理——万字详解
linux·运维·服务器·经验分享·笔记·centos·运维开发
chxin140163 小时前
PyTorch 学习笔记
pytorch·笔记·python