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

    • 如果可能,尝试从不同的网络连接,以查看问题是否仍然存在。
相关推荐
MyhEhud22 分钟前
kotlin @JvmStatic注解的作用和使用场景
开发语言·python·kotlin
狐凄35 分钟前
Python实例题:pygame开发打飞机游戏
python·游戏·pygame
漫谈网络43 分钟前
Telnet 类图解析
python·自动化·netdevops·telnetlib·网络自动化运维
农夫山泉2号2 小时前
【python】—conda新建python3.11的环境报错
python·conda·python3.11
ZHOU_WUYI3 小时前
Flask Docker Demo 项目指南
python·docker·flask
π大星星️4 小时前
基于LNMP架构的个人博客系统部署
服务器·架构
码上淘金7 小时前
【Python】Python常用控制结构详解:条件判断、遍历与循环控制
开发语言·python
Brilliant Nemo7 小时前
四、SpringMVC实战:构建高效表述层框架
开发语言·python
2301_787552878 小时前
console-chat-gpt开源程序是用于 AI Chat API 的 Python CLI
人工智能·python·gpt·开源·自动化
懵逼的小黑子8 小时前
Django 项目的 models 目录中,__init__.py 文件的作用
后端·python·django