通过python脚本测试两台电脑间是否连接正常

部署运行你感兴趣的模型镜像

通过python脚本测试两台电脑间是否连接正常

点我下载可执行文件脚本

问题:两台电脑通过网线、交换机连通后,想知道这两台电脑间是否连接正常

常规的解决方案是通过互ping对方的IP

ipconfig /all
ping xxx.xxx.xxx.xxx

但得到的结果大多是:

请求超时
无法访问目标主机

这些问题可能是由于防火墙引起的,也有可能是其他,但ping不通不意味着没有连通,那么怎么证明已经连通了呢?

通过TCP连接成功并可以互相传数据来验证

以下是python脚本代码:

# !/usr/bin/python
# -*- coding: utf-8 -*-

"""
@contact: 微信 1257309054
@file: 测试两台电脑是否已连通.py
@time: 2022/1/11 16:25
@author: LDC
"""
'''
电脑有时候会因为防火墙的问题使用ping命令时报“请求超时”等无法ping的情况
基于此可以通过TCP连接成功并可以互相传数据来验证
两台电脑是否已经通过网线连通
'''
import socket
import threading
import time


def main():
    while True:
        is_server = input('本电脑是否为服务端?[y/n]\r\n')
        if is_server not in ['y', 'n']:
            print('请输入y或n...')
            continue
        break
    if is_server == 'y':
        # 把本电脑设置成服务端
        # 设置ip
        ip = '0.0.0.0'
        port = 9999
        # 创建一个socket对象,指定协议
        s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        # 监听端口
        s.bind((ip, port))
        # 注意:绑定端口的号的时候尽量不要使用小于1024的
        # 监听端口,传入的参数指等待连接的最大数量
        s.listen(6)
        print('服务端开始监听...')

        def tcp_link(sock, addr):
            # 打印连接成功
            print("%s,连接成功" % str(addr))
            # 服务器发送数据到客户端
            sock.send('已成功连接上服务端...'.encode('utf-8'))
            # 循环接收客户端发来的请求数据
            while True:
                # 接收数据,每次接收1024个字节
                data = sock.recv(1024)
                if not data:
                    break
                data = data.decode("utf-8")
                if data == 'end':
                    break
                print('收到%s的信息:%s' %(addr, data))
                sock.send(("服务器已收到: %s" % data).encode("utf-8"))
            sock.close()
            print("%s,已断开连接" % str(addr))

        # 创建一个新的线程来处理TCP连接
        while True:
            sock, addr = s.accept()
            t = threading.Thread(target=tcp_link, args=(sock, addr))
            # 开启线程
            t.start()
            t.join()
    else:
        # 把本电脑设置成客户端
        # 创建一个socket对象
        try:
            s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
            # 建立连接
            ip = input('请输入服务端ip:\r\n').split()[0]
            s.connect((ip, 9999))
            # 接收消息
            print(s.recv(1024).decode("utf-8"))

            for data in ['第一份数据'.encode('utf-8'), '第二份数据'.encode('utf-8'), '第三份数据'.encode('utf-8')]:
                # 发送数据
                s.send(data)
                time.sleep(1)
                print(s.recv(1024).decode('utf-8'))
            # 最后发送结束的标识
            s.send(b'end')
            # 关闭连接
            s.close()
        except Exception as e:
            print('连接失败',e)

        print(input('请输入任意键结束...'))


if __name__ == '__main__':
    main()

当然如果你的电脑没有安装python解释器,也可以下载可执行文件,直接运行,点我下载

运行可执行文件

测试两台电脑是否已连通.exe分别复制到两台电脑上,然后双击。

其中一台做服务端,双击可执行文件后,输入y,然后回车:

在这里插入图片描述

另外一台做客户端,双击可执行文件后,输入n,然后输入服务端的ip,比如192.168.0.1,然后回车:

在这里插入图片描述

如果能够看到已成功连接上服务端...则说明两台电脑是已经连通了的,即可以互相传数据。

后记

【后记】为了让大家能够轻松学编程,我创建了一个公众号【轻松学编程】,里面有让你快速学会编程的文章,当然也有一些干货提高你的编程水平,也有一些编程项目适合做一些课程设计等课题。

也可加我微信【1257309054】,拉你进群,大家一起交流学习。
如果文章对您有帮助,请我喝杯咖啡吧!

公众号

公众号

关注我,我们一起成长~~

您可能感兴趣的与本文相关的镜像

Python3.10

Python3.10

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

### 问题分析 在两台PLC过交换机连接两台电脑的场景中,一台显示已连接而另一台未连接的问题可能涉及网络配置、子网掩码设置、IP地址冲突或交换机端口配置等问题。根据提供的引用内容[^1]和[^2],可以推测问题可能与以下因素相关: - 子网掩码设置不一致导致两台PLC无法在同一网络正常信。 - PLC与电脑的IP地址规划不合理,导致部分设备无法正确访问。 - 交换机端口配置错误或未启用特定功能(如VLAN划分)。 - 软件层面的连接设置未正确完成。 以下是详细的解决方案及分析。 --- ### 解决方案 #### 1. 检查IP地址与子网掩码 确保所有设备(包括两台PLC和两台电脑)的IP地址和子网掩码配置在同一网段内。如果两台PLC分别位于不同的子网(例如192.168.3.x和192.168.31.x),则需要调整子网掩码以支持跨子网信。例如: - 将子网掩码统一设置为`255.255.0.0`,以便两个子网(192.168.3.x和192.168.31.x)能够互相信[^1]。 - 如果必须保持不同子网,则需要配置路由规则或使用支持跨子网信的交换机。 #### 2. 验证交换机配置 检查交换机端口配置是否正确。如果交换机支持VLAN功能,需确认两台PLC和两台电脑是否被分配到正确的VLAN中。具体步骤如下: - 登录交换机管理页面(默认IP为192.168.0.1)。 - 检查端口配置,确保连接PLC和电脑的端口处于同一VLAN中。 - 如果需要隔离某些设备,可创建多个VLAN并配置相应的路由规则。 #### 3. 检查物理连接 确保所有硬件连接无误,包括网线质量、接口状态等。可以过以下方法验证: - 使用`ping`命令测试各设备之的连性。 - 检查交换机指示灯,确认端口状态是否正常。 #### 4. 软件连接设置 根据引用内容[^2],软件连接设置可能影响信状态。确保以下参数配置正确: - 新增设备时,选择正确的设备类型(如Master-Slave-Server)。 - 接口类型(RS232/RS485)和讯端口需与硬件连接一致。 - 波特率、数据位、校验位和停止位必须与PLC的信参数匹配。 #### 5. 测试与验证 完成上述配置后,重新测试两台电脑与PLC的连接状态: - 在第一台电脑上运行`ping`命令,测试两台PLC的连性。 - 在第二台电脑上重复相同操作,确认是否存在差异。 - 如果问题仍未解决,检查工作站软件是否正确识别了两台PLC。 --- ### 示例代码 以下是一个简单的Python脚本,用于批量测试IP地址的连性: ```python import os def test_ping(ip_list): results = {} for ip in ip_list: response = os.system(f"ping -n 1 {ip} > nul") if response == 0: results[ip] = "Connected" else: results[ip] = "Disconnected" return results # 定义IP地址列表 iplist = ["192.168.3.2", "192.168.31.2", "192.168.32.2"] # 测试并输出结果 ping_results = test_ping(iplist) for ip, status in ping_results.items(): print(f"{ip}: {status}") ``` --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

东木月

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值