目前我正在为一个Mbed项目开发UDP客户端脚本。我与B-L475E-IOT01A开发板合作,希望从另一个网络设备接收数据。
发送端(在另一台设备上(工作。我在电脑上用python脚本进行了测试。
我有以下问题:我可以建立到网络的连接,并且我可以用open()
函数初始化UDP套接字。我的问题是,如果我尝试将套接字bind()
到端口或套接字地址,我会得到nsapi_error_t
代码-3002
,这意味着";无支持的功能";。这是代码:
#include "UDPSocket.h"
#include "mbed.h"
const char SSID[] = "";
const char password[] = "";
const uint16_t Port = 37020;
UDPSocket socket;
WiFiInterface *wifi;
BufferedSerial pc(USBTX, USBRX, 115200);
int main() {
pc.set_format(8, SerialBase::None, 1);
wifi = WiFiInterface::get_default_instance();
if (!wifi) {
printf("ERROR: No WiFiInterface found.n");
return -1;
}
printf("nConnecting to %s...n", SSID);
int ret = wifi->connect(SSID, password, NSAPI_SECURITY_WPA2);
if (ret != 0) {
printf("nConnection error: %dn", ret);
return -1;
}
SocketAddress a;
wifi->get_ip_address(&a);
printf("IP: %sn", a.get_ip_address());
int returnable = 1;
while (returnable != 0) {
returnable = socket.open(wifi);
printf("%drn", returnable);
wait_us(500000);
}
returnable = 1;
while (returnable != 0) {
returnable = socket.bind(Port);
printf("%drn", returnable);
wait_us(500000);
}
while (1) {
char message[500];
int n = socket.recv(&message, sizeof(message));
printf("%drn", n);
printf("%s", message);
wait_us(100000);
}
wifi->disconnect();
printf("nDonen");
}
出于安全原因,我删除了wifi数据。这是输出:
Connecting to ...
IP: 192.168.178.25
0
-3002
我的问题是,为什么我不能把我的董事会绑定到一个特定的端口。你有什么想法吗?提前谢谢。
MBED将socket.bind
声明为bind (const Host &me)
。参数不是端口号,而是Host
实例。将其更改为
sock.bind(Host(IpAddr(), port));