发条戏子 2020-02-03
当端口被其他服务占用时,如果我们还启动这个端口,则会报错,所以很有必要在使用这个端口时,先来检测一下这个端口有没有被其他服务使用。
端口检测需要用到socket模块来校验端口是否被占用
什么是socket?
网络上的两个程序通信,底层都是使用socket来实现的。socket的本质是编程接口,对TCP/IP的封装。
shutdown(flag) 禁止在 一个socket上进行数据的接收与发送,利用shutdown函数使socket双向数据传输变为单项数据传输, shutdown()需要一个单独的参数,该参数表示如果关闭socket
import socket
def check_port(host, port):
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
try:
s.connect((host, port))
s.shutdown(2)
except OSError as e:
print(‘端口没有被其他服务占用,可以使用‘)
print(e)
else:
print(‘端口被其他服务占用了‘)
if __name__ == ‘__main__‘:
check_port(host=‘127.0.0.1‘, port=4723) # port不能是字符串当我们启动appium服务,并且端口是4723时,提示我们
端口被其他服务占用了
当端口没有被其他服务使用时提示
端口没有被其他服务占用,可以使用 [WinError 10061] 由于目标计算机积极拒绝,无法连接。
这时候我们就可以使用4723端口了
前面我们说了关闭端口的两种方式,第一种是在资源管理器中关闭,第二种是使用命令关闭,不管是哪种方式,都需要我们手动去执行,对于做自动化的老司机来说,这肯定不行的,接下来让我们使用脚本来关闭
import os
# 释放端口
def release_port(port):
# 执行命令
cmd_find = ‘netstat -aon | findstr %s‘ % (port)
print(‘cmd_find‘, cmd_find)
# 返回执行后的结果
res = os.popen(cmd_find).read()
print(‘res‘, res)
if str(port) and ‘LISTENING‘ in res:
# 获取端口的pid
i = res.index(‘LISTENING‘) # LISTENTING的索引
start = i + len(‘LISTENING‘) + 7
end = res.index(‘\n‘)
pid = res[start:end]
print(‘pid:‘, pid)
# 关闭被占用端口的pid
cmd_kill = ‘taskkill -f -pid %s‘ % (pid)
print(‘cmd_kill:‘, cmd_kill)
os.popen(cmd_kill) # 关闭端口
else:
print(‘当前端口是可以使用的‘)
if __name__ == ‘__main__‘:
release_port(4727)结果:
cmd_find netstat -aon | findstr 4727 res TCP 0.0.0.0:4727 0.0.0.0:0 LISTENING 3056 pid: 3056 cmd_kill: taskkill -f -pid 3056

2、在设置好端口后就可输入命令连接:adb connect 192.168.2.36:5555,后面的:5555可以不用输入,例如我设置的:6666端口,则通过如下指令连接:。映像名称 PID 会话名