首页 > 编程知识 正文

无法打开连接,网络被重置,逆战自选道具重置技巧

时间:2023-05-05 19:44:58 阅读:47057 作者:1413

错误背景

项目涉及硬件交互,硬件连接使用两个基于Java TCP/IP的长连接套接字连接到同一端口,硬件仅支持建立两个连接。 一旦建立,新连接将无法接受,除非重置硬件Wifi模块。 在开发过程中指导IOS开发和构建相同的PTP/IP连接模块后,IOS在进程被杀死后,硬件重置Wifi并等待重新连接,但安卓端的APP进程被杀死后,硬件重置Wifi

As far as we know,所有UNIX-LIKE系统在进程被杀时释放资源。 socket还会先发送挥手数据包(FIN ),或者挥手4次,区别在哪里呢?

除非所有命令IOS和Android都相同,而不是执行上一个命令,否则这可能只是资源释放的一部分。

查找IOS端和Android端进程被杀后套接字资源释放的差异

环境

macbook pro无线版python

IPhone

是安卓下载总线盒(tcpdump )

实际技能

区别主要是TCP断开方式,抓包最好使用wireshark,用IPhone连接电脑运行

rvi CTL-s 193 c 851574 D6 e 7225 BD 9447 AE 03 f 55 c 5b 5195802

当IOS捕获通过当前wifi网卡的所有分组并发现进程被杀死时,一个套接字发送了FIN分组,然后挥手4次(客户端fin-serverack-server

IPhone资源释放. jpg

查看Android如何断开套接字,然后在root后安装并运行busybox

ADB外壳su-ctcpdump

可以在终端上直接看到数据包。 如果要导入到wireshark,请将数据保存到文件中,然后在wireshark中打开管道或直接使用。 这里省略说明。 Android发现进程被杀后,两个插座都挥手断开

Android默认资源释放. jpg

一边兴奋,一边试着切换到用RST切断,还是挥手切断。 如果尝试在Java中使用RST断开套接字的连接,套接字参数linger必须为true。 因此,在连接了与Android客户机相对应的套接字之后,将linger设置为true

(socket main.sets olinger (真,0 ) ) ) ) ) ) ) )。

完成后,我发现没有什么蛋用的。 苦闷。

苦恼之后,在Mac上用python试着与硬件建立了连接。 我们还杀了python进程,看看硬件会有什么反应。 花了几分钟写python,拦截数据包,运行它,杀死它,发现硬件重置了Wifi模块,我很兴奋。 如果查看数据包,您会发现这两个套接字都是通过RST方法断开的。

再次使用Android进行调整,在两个套接字上将linger设置为true,现在为。

总结

这次解决错误很容易在这里讲述,但一共花了三天时间,在这期间尝试了无数次绕道。 归纳起来,还不知道故障的原因。 安卓端硬件的官方APP被杀的时候,两个socket被切断也是4次手的方式,但是反编译一下这个代码,它是通过使用的so库来实现的,暂时只能推测语言抽象水平和执行环境之间的关系。 在c语言中可以使用FIN FIN,在OC中可以使用FIN RST,在python和kotlin中可以使用RST RST,这似乎需要RST来解释要执行的代码。

虽然错误很奇怪,但解决过程也恢复了很多基础tcp/ip知识。 工具的使用方法也变好了。 有时间再整理吧

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。