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

    • 如果可能,尝试从不同的网络连接,以查看问题是否仍然存在。
相关推荐
YUELEI1182 分钟前
langchain 提示模版 PromptTemplate
python·langchain
liliangcsdn5 分钟前
结合prompt分析NodeRAG的build过程
java·服务器·人工智能·数据分析·知识图谱
东方不败之鸭梨的测试笔记5 分钟前
LangChain: Models, Prompts 模型和提示词
人工智能·python·langchain
siriuuus21 分钟前
Linux 磁盘扩容及分区相关操作实践
linux·运维·服务器
AI Echoes41 分钟前
别再手工缝合API了!开源LLMOps神器LMForge,让你像搭积木一样玩转AI智能体!
人工智能·python·langchain·开源·agent
AI Echoes44 分钟前
从零构建企业级LLMOps平台:LMForge——支持多模型、可视化编排、知识库与安全审核的全栈解决方案
人工智能·python·langchain·开源·agent
jz_ddk1 小时前
[Linux] Linux标准块设备驱动详解:从原理到实现
linux·运维·服务器·驱动开发
beijingliushao2 小时前
58-正则表达式
数据库·python·mysql·正则表达式
陈敬雷-充电了么-CEO兼CTO2 小时前
具身智能多模态感知与场景理解:融合语言模型的多模态大模型
人工智能·python·gpt·语言模型·自然语言处理·chatgpt·多模态
荔枝吻2 小时前
【AI总结】Python BERT 向量化入门指南
人工智能·python·bert