使用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 <module>

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 <module>

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

    • 如果可能,尝试从不同的网络连接,以查看问题是否仍然存在。
相关推荐
橙意满满的西瓜大侠11 分钟前
pytorch导入数据集
人工智能·pytorch·python
ᴡᴀᴋᴜ⌓‿⌓ᴡᴀᴋᴜ12 分钟前
手动在Linux服务器上部署并运行SpringBoot项目(新手向)
linux·服务器·spring boot·后端
汤兰月20 分钟前
单例模式:Python中的“独一无二”模式
开发语言·python·单例模式
小安运维日记27 分钟前
Linux云计算 |【第四阶段】RDBMS2-DAY3
linux·运维·服务器·数据库·mysql·云计算
Bonne journée33 分钟前
python pass的作用
开发语言·python·算法
我命由我1234544 分钟前
5.Python 数据容器(list 列表、tuple 元组、str 字符串、set 集合、dict(字典)、序列切片)
数据结构·windows·笔记·python·学习·list·python3.11
亿林网络数据1 小时前
Linux常用应急溯源命令
linux·运维·服务器
阿猿收手吧!1 小时前
【Linux复习】指令
linux·运维·服务器
飞的肖1 小时前
MobaXterm(linux)远程运维工具使用说明
linux·运维·服务器
penny_tcf1 小时前
Linux基础命令netstat详解
linux·运维·服务器