原始LWIP向静态IP发送TCP传输
我已经让TCP Echo示例在我的硬件上运行得很好,昨天我就知道了如何让UDP广播工作。经过进一步思考,我意识到我真正需要的是能够建立一个到静态IP的TCP连接,这个想法是我的硬件可以连接到某种类型的服务器,然后使用该连接进行所有事务。不同之处在于,尽管echo示例设置了一个被动连接,该连接与传入源绑定(据我所知),但我希望有意地启动到已知IP的连接 根据我在维基上找到的 作为基本情况,我尝试实现一个可以将数据包发送到已定义IP的函数。我只是想发送一个数据包到我的电脑,我正在Wireshark上寻找它原始LWIP向静态IP发送TCP传输,c,tcp,embedded,packet,lwip,C,Tcp,Embedded,Packet,Lwip,我已经让TCP Echo示例在我的硬件上运行得很好,昨天我就知道了如何让UDP广播工作。经过进一步思考,我意识到我真正需要的是能够建立一个到静态IP的TCP连接,这个想法是我的硬件可以连接到某种类型的服务器,然后使用该连接进行所有事务。不同之处在于,尽管echo示例设置了一个被动连接,该连接与传入源绑定(据我所知),但我希望有意地启动到已知IP的连接 根据我在维基上找到的 作为基本情况,我尝试实现一个可以将数据包发送到已定义IP的函数。我只是想发送一个数据包到我的电脑,我正在Wireshark上
void echo_tx_tcp()
{
err_t wr_err = ERR_OK;
struct tcp_pcb *l_tcp_pcb;
l_tcp_pcb = tcp_new();
ip_addr_t dest_ip =
{ ((u32_t)0x0C0C0C2BUL) };
wr_err = tcp_bind(l_tcp_pcb, &dest_ip, 12);
wr_err = tcp_connect(l_tcp_pcb, &dest_ip, 12, echo_accept);
tcp_sent(l_tcp_pcb, echo_sent);
struct pbuf *p = pbuf_alloc(PBUF_TRANSPORT, 1024, PBUF_RAM);
unsigned char buffer_send[1024] = "My Name Is TCP";
p->payload = buffer_send;
p->len = 1024;
p->tot_len = 1024;
wr_err = tcp_write(l_tcp_pcb, p->payload, p->len, 1);
wr_err = tcp_output(l_tcp_pcb);
if(wr_err == ERR_OK)
{
p->len++;
}
return;
}
最后一个if语句正好存在,以便我可以使用调试器检查wr_err值。错误恢复正常,但在wireshark上看不到数据包。我的设置是我的硬件以及我的电脑以隔离的方式连接到路由器。PC本地IP地址为12.12.12.43
我是否遗漏了一个步骤?如果出现以下情况,tcp\u write()函数将失败并返回ERR\u MEM:
tcp_sent()可以通过回调函数实现,当发送空间可用时将调用回调函数 因此,假设tcp_bind()调用失败。你怎么知道?@MahonriMoriancumer事实上,绑定没有失败,我从tcp写入中得到了一个错误。你知道是什么引起的吗。。。很好的用户名。我想说明一点。问题代码没有错误处理。因此,试图诊断发生了什么是困难的。当前,该代码仅在tcp_output()返回时指示错误。我建议对问题代码进行编辑,以更好地显示每个调用是否成功;然后是您遇到错误的地方。换句话说,获得答案可能需要对问题代码进行编辑,以显示tcp_write()之前的所有函数都已成功,并且tcp_write返回了特定错误(ERR_MEM)。