通过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
,然后回车:
如果能够看到已成功连接上服务端...
则说明两台电脑是已经连通了的,即可以互相传数据。
后记
【后记】为了让大家能够轻松学编程,我创建了一个公众号【轻松学编程】,里面有让你快速学会编程的文章,当然也有一些干货提高你的编程水平,也有一些编程项目适合做一些课程设计等课题。
公众号
关注我,我们一起成长~~