通过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,然后回车:

在这里插入图片描述

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

后记

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

公众号

公众号

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