简单场景#
主要介绍如何在各种网卡状态下进行网络通信。以下场景数据通信将使用 socket tcp 通信为例进行说明。
使用默认蜂窝无线网卡传输数据#
对于单独蜂窝无线网卡情况下,可以不绑定网卡进行通信。
示例代码如下:
# 导入usocket模块
import usocket
if __name__ == '__main__':
# 创建一个socket实例
sock = usocket.socket(usocket.AF_INET, usocket.SOCK_STREAM)
sock.settimeout(5)
# 解析域名
sockaddr=usocket.getaddrinfo('python.quectel.com', 80)[0][-1]
print('start connect')
# 建立连接
sock.connect(sockaddr)
# 向服务端发送消息
ret=sock.send('GET /NEWS HTTP/1.1\r\nHost: python.quectel.com\r\nAccept-Encoding: deflate\r\nConnection: keep-alive\r\n\r\n')
print('send %d bytes' % ret)
#接收服务端消息
data=sock.recv(1024)
print('recv %s bytes:' % len(data))
print(data.decode())
# 关闭连接
sock.close()
使用多张蜂窝网卡并指定网卡传输数据#
对于支持多 sim 卡或者多路拨号的情况下,具体使用哪一路或者哪一个sim卡进行通信,需要指定从哪一路进行传输。
socket API 标准接口提供了数据通信绑定网卡操作,调用*socket.bind()*绑定 ip 及端口号,可以解决多路网卡数据传输指向问题。
如上图所示,使用NIC1网卡通信展示代码如下:
# 导入usocket模块
import usocket
if __name__ == '__main__':
# 创建一个socket实例
sock = usocket.socket(usocket.AF_INET, usocket.SOCK_STREAM, usocket.TCP_CUSTOMIZE_PORT)
sock.settimeout(5)
sock.bind(("10.11.129.251", 0))
# 解析域名
sockaddr=usocket.getaddrinfo('python.quectel.com', 80)[0][-1]
print('start connect')
# 建立连接
sock.connect(sockaddr)
# 向服务端发送消息
ret=sock.send('GET /NEWS HTTP/1.1\r\nHost: python.quectel.com\r\nAccept-Encoding: deflate\r\nConnection: keep-alive\r\n\r\n')
print('send %d bytes' % ret)
#接收服务端消息
data=sock.recv(1024)
print('recv %s bytes:' % len(data))
print(data.decode())
# 关闭连接
sock.close()
如上图所示,使用NIC2网卡通信展示代码如下:
# 导入usocket模块
import usocket
if __name__ == '__main__':
# 创建一个socket实例
sock = usocket.socket(usocket.AF_INET, usocket.SOCK_STREAM, usocket.TCP_CUSTOMIZE_PORT)
sock.settimeout(5)
sock.bind(("10.11.129.252", 0))
# 解析域名
sockaddr=usocket.getaddrinfo('python.quectel.com', 80)[0][-1]
print('start connect')
# 建立连接
sock.connect(sockaddr)
# 向服务端发送消息
ret=sock.send('GET /NEWS HTTP/1.1\r\nHost: python.quectel.com\r\nAccept-Encoding: deflate\r\nConnection: keep-alive\r\n\r\n')
print('send %d bytes' % ret)
#接收服务端消息
data=sock.recv(1024)
print('recv %s bytes:' % len(data))
print(data.decode())
# 关闭连接
sock.close()
使用以太网卡传输数据#
以太网在不同的工作方式下,数传有一定差异。我们分别以网关模式(LAN)及终端模式(WAN)工作状态下进行介绍。
网关模式(LAN)
以太网 LAN 工作状态下,使用 4G 网络为 LAN 局域网下设备提供网络服务,此时 4G 作为默认网卡。如果模块需要通过以太网进行通信,则必须通过调用*socket.bind()*来指定使用哪个网卡进行网络通信。
示例代码展示如下:
# 导入usocket模块
import usocket
if __name__ == '__main__':
# 创建一个socket实例
sock = usocket.socket(usocket.AF_INET, usocket.SOCK_STREAM, usocket.TCP_CUSTOMIZE_PORT)
sock.settimeout(5)
sock.bind(("192.168.1.1", 0))
# 解析域名
sockaddr=usocket.getaddrinfo('python.quectel.com', 80)[0][-1]
print('start connect')
# 建立连接
sock.connect(sockaddr)
# 向服务端发送消息
ret=sock.send('GET /NEWS HTTP/1.1\r\nHost: python.quectel.com\r\nAccept-Encoding: deflate\r\nConnection: keep-alive\r\n\r\n')
print('send %d bytes' % ret)
#接收服务端消息
data=sock.recv(1024)
print('recv %s bytes:' % len(data))
print(data.decode())
# 关闭连接
sock.close()
终端模式(WAN)
WAN工作状态下,以太网口被配置为专门与外界通信的,默认以太网卡作为默认网卡。我们可以在不绑定的情况下直接通信即可。
示例代码展示如下:
# 导入usocket模块
import usocket
if __name__ == '__main__':
# 创建一个socket实例
sock = usocket.socket(usocket.AF_INET, usocket.SOCK_STREAM)
sock.settimeout(5)
# 解析域名
sockaddr=usocket.getaddrinfo('python.quectel.com', 80)[0][-1]
print('start connect')
# 建立连接
sock.connect(sockaddr)
# 向服务端发送消息
ret=sock.send('GET /NEWS HTTP/1.1\r\nHost: python.quectel.com\r\nAccept-Encoding: deflate\r\nConnection: keep-alive\r\n\r\n')
print('send %d bytes' % ret)
#接收服务端消息
data=sock.recv(1024)
print('recv %s bytes:' % len(data))
print(data.decode())
# 关闭连接
sock.close()
使用 Wi-Fi 网卡传输数据#
Wi-Fi 网卡在不同的工作方式下,数传有一定差异。我们分别以 Station 模式及 AP 模式工作状态下进行介绍。
Station 模式
Station 模式工作状态下,Wi-Fi 网口被配置为专门与外界通信的,默认 Wi-Fi 网卡作为默认网卡。我们可以在不绑定的情况下直接通信即可。
示例代码展示如下:
# 导入usocket模块
import usocket
if __name__ == '__main__':
# 创建一个socket实例
sock = usocket.socket(usocket.AF_INET, usocket.SOCK_STREAM)
sock.settimeout(5)
# 解析域名
sockaddr=usocket.getaddrinfo('python.quectel.com', 80)[0][-1]
print('start connect')
# 建立连接
sock.connect(sockaddr)
# 向服务端发送消息
ret=sock.send('GET /NEWS HTTP/1.1\r\nHost: python.quectel.com\r\nAccept-Encoding: deflate\r\nConnection: keep-alive\r\n\r\n')
print('send %d bytes' % ret)
#接收服务端消息
data=sock.recv(1024)
print('recv %s bytes:' % len(data))
print(data.decode())
# 关闭连接
sock.close()
AP 模式
Wi-Fi 网卡在 AP 工作状态下,使用 4G 网络为 AP 局域网下设备提供网络服务,此时 4G 作为默认网卡。如果模块需要通过 Wi-Fi 网卡 进行通信,则必须通过调用*socket.bind()*来指定使用哪个网卡进行网络通信。
对于单网卡设备可以直接通信,无需绑定操作。
示例代码展示如下:
# 导入usocket模块
import usocket
if __name__ == '__main__':
# 创建一个socket实例
sock = usocket.socket(usocket.AF_INET, usocket.SOCK_STREAM, usocket.TCP_CUSTOMIZE_PORT)
sock.settimeout(5)
sock.bind(("192.168.1.1", 0))
# 解析域名
sockaddr=usocket.getaddrinfo('python.quectel.com', 80)[0][-1]
print('start connect')
# 建立连接
sock.connect(sockaddr)
# 向服务端发送消息
ret=sock.send('GET /NEWS HTTP/1.1\r\nHost: python.quectel.com\r\nAccept-Encoding: deflate\r\nConnection: keep-alive\r\n\r\n')
print('send %d bytes' % ret)
#接收服务端消息
data=sock.recv(1024)
print('recv %s bytes:' % len(data))
print(data.decode())
# 关闭连接
sock.close()






