如何真正准确查询TCP的连接状态?



  • 回复: RAK477 模块主动连接TCP服务器地址的问题
    以上的问题已经解决;是SocketA IP 地址和端口号,模块会自动连接;但现在的问题是:服务器端的服务器已经完全关闭与删除之后,查询RAK477模块的TCP连接状态,居然有时候返回OK1,有时返回OK0,为何会出现OK1呢?
    模块复位重启后,都是这种情况。请问如何真正准确的查询TCP的连接状态?谢谢



  • 有时返回OK1是你在断开后多长时间查询的?



  • 你好,不管是断开多长时间,都一样。因为我断电,重启,都会出现OK0 OK1这两种状态。
    今天我详细测试了RAK477连接TCP状态的问题,现描述如下:
    1、出厂模式下,执行命令“at+tcp_status=0”,查询socketA的连接状态,一直为OK0,这没错;
    因为出厂的参数STA的ssid以及psk在我这里是连接不上的,socketA的IP地址与PORT当然也连接不上。

      出厂模式下的参数如下:
    

    wlan_mode=1&ap_ssid=RAK477_AP&ap_channel=6&ap_sec_mode=0&ap_psk=&ap_max_clts=3&ap_bdcast=1&ap_ip=192.168.7.1&sta_ssid=RAK_STATION&sta_sec_mode=1&sta_psk=1234567890&sta_dhcp=1&sta_sec_type=8&sta_bssid=00:00:00:00:00:00&sta_ip=192.168.78.2&sta_netmask=255.255.255.0&sta_gateway=192.168.78.1&sta_dns1=0.0.0.0&sta_dns2=0.0.0.0&uart_baudrate=115200&uart_datalen=8&uart_parity_en=0&uart_stoplen=1&uart_rtscts_en=0&uart_timeout=20&uart_recvlenout=500&mode_pin=0&userlist_en=0&web_switch=0&web_en=1&web_func_en=0&local_find_en=1&first_user_switch=0&last_user_switch=0&add_led_en=0&power_mode=0&socket_multi_en=0&socketA_type=1&socketA_max_clts=3&socketA_destip=192.168.1.1&socketA_destport=80&socketA_localport=25000&socketA_tcp_timeout=0&socketA_tcp_reconval=3&socketB_type=1&socketB_max_clts=3&socketB_destip=192.168.1.1&socketB_destport=80&socketB_localport=25000&socketB_tcp_timeout=0&socketB_tcp_reconval=3&easycfg_timeout=60&user_name=admin&user_password=admin&module_name=RAK477&module_group=01

    2、我只在以上参数修改wlan_mode为0,以及修改sta_ssid和sta_psk为我这边的WIFI热点;以及socketA_type修改为0,因为我实现的是我的设备作为客户端,PC有服务器,由我的设备客户端主动连接服务器地址与端口进行TCP传输数据。

    我的配置参数下:
    wlan_mode=0&ap_ssid=RAK477_AP&ap_channel=6&ap_sec_mode=0&ap_psk=&ap_max_clts=3&ap_bdcast=1&ap_ip=192.168.7.1&sta_ssid=CCdd&sta_sec_mode=1&sta_psk=zzzz22222&sta_dhcp=1&sta_sec_type=8&sta_bssid=00:00:00:00:00:00&sta_ip=192.168.78.2&sta_netmask=255.255.255.0&sta_gateway=192.168.78.1&sta_dns1=0.0.0.0&sta_dns2=0.0.0.0&uart_baudrate=115200&uart_datalen=8&uart_parity_en=0&uart_stoplen=1&uart_rtscts_en=0&uart_timeout=20&uart_recvlenout=500&mode_pin=0&userlist_en=0&web_switch=0&web_en=1&web_func_en=0&local_find_en=1&first_user_switch=0&last_user_switch=0&add_led_en=0&power_mode=0&socket_multi_en=0&socketA_type=0&socketA_max_clts=3&socketA_destip=192.168.1.1&socketA_destport=80&socketA_localport=25000&socketA_tcp_timeout=0&socketA_tcp_reconval=3&socketB_type=1&socketB_max_clts=3&socketB_destip=192.168.1.1&socketB_destport=80&socketB_localport=25000&socketB_tcp_timeout=0&socketB_tcp_reconval=3&easycfg_timeout=60&user_name=admin&user_password=admin&module_name=RAK477&module_group=01

    3、现在的问题是:服务器都没有开启,执行命令“at+tcp_status=0”,查询socketA的连接状态,一直是不稳定,有时OK0,有时OK1,并且发送数据也一样,有时发送成功,有时返回ERROR-2
    RAK477模块重新断电,再开启,由于配置参数掉电保存,所以依然还出现这种状态值不稳定的现象。

    4、wlan_mode不管是0还是2,即有STA模式下的,都有这个问题;
    socketB也一样的现象;
    socket_multi_en修改为1,即双socket也有这个问题。

    烦请帮忙分析一下这个问题,谢谢!!
    我的WIFI模块版本号是:1.0.0.3-3.11.4



  • 你服务器的IP地址和端口就是socketA_destip=192.168.1.1&socketA_destport=80这些是吗?
    你的路由器设置的是哪个IP段内的?

    你可能让模块连接了路由器内的WEB服务器了,建议检查下你自己服务器的IP地址和端口号。找到后,配置到这两个参数上。



  • 你好。其实我的服务器是自己电脑自己模拟的,建立一个服务器地址,如下图:
    0_1500263889126_upload-39503e83-84e8-42e9-baff-944bbb95fab1

    但我测试时,直接把这个测试软件关闭了。

    我服务器的IP地址和端口并不是你所说的,你所说的“socketA_destip=192.168.1.1&socketA_destport=80”这个是出厂的参数,我没有修改。
    实际我只修改了上面配置信息黑色加粗的字体,即只修改了StaSsid即让模块连接上我这边的热点;
    重点应该是:修改了“socketA_type=0”就有问题,如果改为1或者其它值好像是正常的。

    麻烦你们自己也验证一下

    请问你所说的连接了路由器的WEB服务器?如何查呢?
    指的是连接上我这边热点的服务器?
    但问题是IP地址和端口都不对吧,我用的是出厂配置的地址“socketA_destip=192.168.1.1&socketA_destport=80”

    期待你的答复,谢谢!



  • 可能你是不熟悉Socket如何建立。
    你说的你设置的socketA_type=0,说明你建立的是TCP客户端,然后你在电脑上建立的是TCP服务器。你服务器的IP地址是192.168.1.102,端口是502.
    但是你配置的模块却是用的默认的socketA_destip=192.168.1.1&socketA_destport=80。所以说模块连接的服务器不是你建立的电脑的服务器。
    你将这两个参数改成这样再试试socketA_destip=192.168.1.102&socketA_destport=502.



  • 你好,模块连接的服务器不是我建立的电脑服务器,那么RAK477不也应该判断连接状态要返回OK0,不是吗?
    但问题就是有时OK1,有时OK0。
    目前我们有一个需求就是要判断连接socket是否连接成功的状态还是链接已断开。



  • 请问你们有自己验证下,按照我所说的,以及我提供的参数配置进行验证下吗?
    其实:就只需要配置我提供的配置参数就可以了。
    不需要修改socket的地址。
    重点是修改wlan_mode=0、socketA_type=0,以及要使用模块连接上热点

    问题现象:
    1、“at+tcp_status=0”,有时返回OK1,有时返回OK0
    2、发送数据,也一样的现象,有时OK,有时ERROR-2

    不应该别的客户使用RAK477,没遇到我所描述的问题吧??



  • 我不明白你这样连的意义在哪里,你不设置模块的Socket地址,模块肯定是连的默认的。
    而且和你说过,这个默认的Socket地址可能就是你路由的WEB服务器的地址。你如果了解WEB服务器的机制的话就知道为什么有时可以连接,有时无法连接了。WEB服务器一般都是短连接,通信完后就会断开。所以可能造成有时连接上,有时没连接的情况。

    你还是修改模块的Socket地址,让模块连接到你电脑的服务器上,你再手动关闭电脑服务器测试看看。如果这样还有问题,就是模块的问题了。



  • @xc.c
    你好!
    一开始测试的时候,我是把socketA的IP地址和端口号改为我要连接服务器的地址,数据传输等都是很稳定的。这没问题!
    查询TCP状态也很稳定,一直为OK1。但我直接关闭了服务器,就出现我一开始提出来的问题。有时OK1,有时OK0。
    后来才花了时间去调试,看是哪里出的问题。
    总结出来只要修改了什么参数就一定会有这种情况,就是上面提写出来的总结。
    由于项目的PCB已经选型你们的RAK477,我才花这些时间请求你们帮忙分析。
    如果说是模块的话,是否你们自己有按照我所说的配置参数,你们也自己验证是否模块固件问题?
    如果是,请提供新固件我升级即可。

    你们可以修改socketA,让模块连接上,之后直接关闭服务器,再查询TCP状态,看是什么情况。
    如果你们测试没有这种情况,我们再焊一个新样机,还是有这种情况的话,就真不知道怎么使用这个模块了。。。

    继续等待你的答复,谢谢



  • 我们使用你说的版本测试,并没有发现你说的情况。

    我们477模块在你配置好Socket连接的IP地址和端口后,如果连接不上,会一直尝试去连接的。

    0_1500342393581_upload-bbd90662-df3b-439f-9cc1-edf377bfe82a

    0_1500342424187_upload-90e5b996-9398-46ee-a24b-8b7e716c7483



  • 关闭服务器之后,发送查询TCP状态,一直返回OK0????



  • 换了一个新的RAK477,都是一样的情况!
    都不知道怎么整了
    原理图没有问题吧?

    0_1500369052485_upload-26321f91-57bb-43dd-a20b-a43f6c09da9c



  • 是的,我们这边测试一直是OK0.

    你连接的是你们的服务器?你们的服务器是多少?我们连接试试.



  • @xc.c 首先,跟我们服务器地址没关,服务器的建立上次有提到过,就是用我自己电脑建立的服务器;
    2、我的配置参数socketA的地址使用的默认参数。

    我在想,能否提供你测试没问题的RAK477使用的配置参数发出来,我参考你的配置来验证。
    谢谢



  • wlan_mode=0&ap_ssid=RAK477_AP&ap_channel=6&ap_sec_mode=0&ap_psk=&ap_max_clts=3&ap_bdcast=1&ap_ip=192.168.7.1&sta_ssid=RAK_2.4GHz_1&sta_sec_mode=1&sta_psk=rakwireless205&sta_dhcp=1&sta_sec_type=8&sta_bssid=00:00:00:00:00:00&sta_ip=192.168.78.2&sta_netmask=255.255.255.0&sta_gateway=192.168.78.1&sta_dns1=0.0.0.0&sta_dns2=0.0.0.0&uart_baudrate=115200&uart_datalen=8&uart_parity_en=0&uart_stoplen=1&uart_rtscts_en=0&uart_timeout=20&uart_recvlenout=500&mode_pin=0&userlist_en=0&web_switch=0&web_en=1&web_func_en=0&local_find_en=1&first_user_switch=0&last_user_switch=0&add_led_en=0&power_mode=0&socket_multi_en=0&socketA_type=0&socketA_max_clts=3&socketA_destip=192.168.70.106&socketA_destport=502&socketA_localport=25000&socketA_tcp_timeout=0&socketA_tcp_reconval=3&socketB_type=1&socketB_max_clts=3&socketB_destip=192.168.1.1&socketB_destport=80&socketB_localport=25000&socketB_tcp_timeout=0&socketB_tcp_reconval=3&easycfg_timeout=60&user_name=admin&user_password=admin&module_name=RAK477&module_group=01



  • @xc.c 你好
    我按照你的参数,只修改了热点;
    经测试,检测TCP状态居然一直返回OK0,是正常的;
    那么,我修改了socketA的地址和端口
    socketA_destip=122.228.19.57&socketA_destport=23483
    设置成功之后,复位重启。读取配置确保已经设置成功
    发送检测TCP,居然跟我之前的现象一样,有时OK1有时OK0
    这是怎么回事呢?
    麻烦你也用我的服务器地址测试验证下。是否你们那么也有这个问题?
    感谢!!



  • 期待官方的回复.....



  • 我已经验证出问题:
    由于我测试的服务器地址是小区网络,并不是公网IP
    我用花生壳模拟出来的服务器IP
    如果用你们IP,用别的公网IP就正常。

    请问WIFI模块能优化这个问题吗?做到真正能通过一条AT指令判断模块的TCP连接状态!
    希望你们能通过固件升级解决这个问题!

    你们可以通过连接我的服务器IP地址进行验证测试

    socketA_type=0&socketA_max_clts=3&socketA_destip=122.228.19.57&socketA_destport=23483



  • 你的这个socketA_destip=122.228.19.57&socketA_destport=23483是远程服务器的IP和端口吗?
    我们这边连不上你的这个服务器。


登录后回复
 

与 RAK支持中心 的连接断开,我们正在尝试重连,请耐心等待