WIFI如何直接通过端口传输数据?
-
我想要通过WIFI扩展版直接用socket建立UDP传输数据,而不是需要建立HTTP头之后再传输数据?
代码如下:
import socket, network SSID ='OPENMV_AP' # Network SSID KEY ='1234567890' # Network key (must be 10 chars) HOST = '192.168.1.100' PORT = 8080 BUFFSIZE = 1024 MAX_LISTEN = 5 ADDR = [HOST, PORT] wlan = network.WINC(mode=network.WINC.MODE_AP) wlan.start_ap(SSID, key=KEY, security=wlan.WEP, channel=2) def udpClient(s): # 创建客户端套接字 while True: # 发送信息到服务器 data = "THANKS" s.sendto(data.encode('utf-8'), ADDR) print('send success') # 接收服务端返回信息 recvData, addrs = s.recvfrom(BUFFSIZE) print('recv message : {}'.format(recvData.decode('utf-8'))) # 关闭套接字 s.close() if __name__ == '__main__': while True: s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) print('execute udpsever') udpClient(s)
以上相同的代码(除去network模块),在PC端运行,我可以在客户端获取到数据,而在openmv上没有数据?
PC 端运行时:
openmv上运行时:
-
第二张图错误,现更改:
-
HTTP是建立在TCP上面的,和UDP一点关系都没有。
-
我看你的Wi-Fi扩展板是AP模式。电脑和Wi-Fi扩展板是在一个局域网里吗?
还有端口64602哪来的?
-
UDP不管怎么样都会发送成功,因为UDP不会确认,不会管到底接受没有。
所以在网络调试助手看到发送OK,不代表会传送到目的地,可能中间就断掉了。
-
电脑是链接到板子的WIFI上的,查看WIFI属性,可以看到openmv的WIFI的IP地址和DNS地址:
可以看到“网络调试助手本机地址”:192.168.1.100,是其链接的WIFI的IP地址,端口为8080(可手动修改)。而远程主机地址为:192.168.1.100:64602,应该是建立的传输进程服务,其端口号,也就是“64602”每次建立链接都会变。
我怀疑是传输地址不匹配导致的,数据是有传输过去,但是没有传输到正确的端口号。
我之后尝试建立了TCP,不过还是老问题。
-
我通过openmv做的东西,需要远程实时传输数据和图片,需要用到WIFI建立TCP或者UDP。如果通过HTTP取获取数据,每次都需要刷新网页,并且很多时候传输卡顿,数据不实时。
如果是不用AP模式,用STA模式,也能够建立TCP吗?
-
还有就是,WIFI扩展版可以直接建立TCP传输而不是通过HTTP吗?
-
-
@5co6 在 WIFI如何直接通过端口传输数据? 中说:
还有就是,WIFI扩展版可以直接建立TCP传输而不是通过HTTP吗?
可以。你看http的例子,就是socket的tcp的发包。https://book.openmv.cc/example/14-WiFi-Shield/http-client.html
-
好的,感谢,我再找找问题,之所以建立的TCP链接无法通信,我觉得可能与WIFI的IP地址和端口号定义有关