问题标签 [lwip]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
3987 浏览

c - lwIP 支持 Zeroconf 吗?

我看到lwIP有一些 AutoIP(又名 IPv4LL,又名RFC 3927)代码,但我不知道它是否在Zeroconf堆栈中做了任何更高的事情,即 mDNS 和DNS-SD(使用RFC 2782)。

那么,lwIP 是否支持 DNS-SD 服务发现?如果不是,从像Avahi这样的项目中移植代码是否容易(假设许可允许)?

0 投票
1 回答
1173 浏览

c++ - 我的任务将 lwIP 从 C 转换为 C++

我得到了将库lwIP重写为OOP风格的任务,作为对象流,我开始理解,爬进这个库,但这就是问题所在:src\include\lwip\arch.h包含文件cc.h(第 43 行)既找不到 I 也找不到编译器

0 投票
2 回答
3354 浏览

c - Zeroconf 名称解析

我正在开发一个带有嵌入式网络服务器的控制设备。网络服务器为任何请求它的网络浏览器(来自 Windows 浏览器、Mac 浏览器、iPhone android 等)提供控制接口。

我遇到的问题是一般地知道如何访问设备的一般方法。即在网络浏览器中输入什么地址。

固定 IP 对我的用户来说太技术化了,并且可能会出错,因为我的设备可以插入许多不同的本地网络。使用 uPnp 服务发现需要在某些平台的客户端上运行软件,并且不像只输入网址那么自然。我想实现名称解析。

我当前的实现使用 netbios 协议。因此,在 Windows 浏览器中,我可以键入 //controller/ 并且它可以工作,但这不适用于 Mac 或智能手机。我还可以尝试实现 Apple 的 mDnsresponder,它应该让 Mac 和 iPhone 玩得开心(尽管我认为我仅限于 //controller.local/)。也许 Android、Symbian 等也存在类似的事情,但是没有一个更通用的解决方案来创建一个我可以尝试的网络名称吗?

该平台目前基于 TI Cortex M3 处理器和 lwIP。

非常感谢任何有关如何找到解决方案的帮助或建议。

亲切的问候,

鲍勃

0 投票
3 回答
16625 浏览

c - C中的多线程客户端-服务器套接字编程

我在具有相同 IP 地址但客户端和服务器端口不同的同一台机器上用 C 语言实现多线程客户端-服务器套接字编程。我已经在 C 环境中使用 pthread 概念实现了它。但是我只能看到我的客户端线程正在运行,而我的服务器线程在到达“accept()”例程后就停止了。我想知道可能是什么问题。如果有人能找出我在哪里犯了错误,那将非常有帮助

我的客户代码如下所示:

我的服务器代码:

如果我做错了,请告诉我

问候德布

0 投票
1 回答
1551 浏览

networking - lwip DHCP 客户端在路由器的活动 IP 表中不可见

我在一个微控制器上开发了一个 lwip 客户端,似乎在启动时成功地获取了一个 IP 地址。此外,设备成功响应基于网络的查询(例如基于套接字的命令、网页“GET”)。

我遇到的问题是,当我查看路由器的“活动 IP 表”时,设备不存在,我开始怀疑我是否在 lwip 启动过程中做错了什么。

有谁知道我应该从哪里开始解决这个问题?

更新(2011 年 10 月 20 日):

我越来越相信设备的 MAC 地址至少在某种程度上是负责任的。在比较我的 Windows ARP 表和我认为我在 lwip 初始化中设置的 MAC 地址时,我发现目标的 MAC 地址有冲突。

0 投票
2 回答
2868 浏览

memory-leaks - 如何从 lwIP 的 mem_malloc 获取可用内存?

我在嵌入式设备上使用 lwIP,我觉得我可能遇到了一些与内存不足有关的错误。我知道当内存分配失败时 mem_malloc 函数本身将返回 null,但是有没有办法在任意时间点粗略评估可用内存?如果能够直接监控它,以确定哪些使用模式正在泄漏内存,那就太好了。

谢谢。

0 投票
1 回答
3227 浏览

c - 收到的 UDP 数据包是否在 LwIP 堆栈中排队?

我正在使用LwIPFreeRTOS为嵌入式设备编写C程序,微控制器是 Atmel AVR32。

LwIP中,通过设置udp接收回调函数后udp_recv(),我知道一旦接收到UDP数据报就会调用回调函数。process_udp_packet()然后我可以在回调函数内部做一些事情。但是,如果在回调函数完成之前收到另一个UDP数据包,这第二个数据包会在缓冲区中排队吗?还是立即再次调用回调函数,连第一个回调函数都没有完成?

非常感谢你。

0 投票
1 回答
9885 浏览

network-programming - LwIP - netconn API - 在进程被阻塞时发送 TCP 数据包?

我正在使用 FreeRTOS + LwIP开发基于以太网的床边护士呼叫设备。看了一些例子和文档后,我想用LwIP的netconn API在TCP下发送和接收数据,因为我不熟悉BSD风格的API,原始API可能比较难。

我知道该netconn_accept()函数会阻塞进程,直到来自远程主机的连接请求到达,并且该netconn_recv()函数也会在等待数据到达时阻塞进程......这两个函数都会阻塞进程,这对服务器有好处接收数据,但是,我的设备还需要充当客户端,当患者按下按钮时,需要触发对护士中心的“呼叫”。那么它如何在等待来自远程主机的连接(阻塞进程)的同时发起发送 TCP 数据包呢?

我需要发送 TCP,因为我必须使用 SIP(​​会话发起协议)来发起呼叫,它应该是可靠的,因为它是一个医疗设备。非常感谢你


@Kyle Heironimus ,@werewindle 我将您添加到我的问题中,因为我知道您在 LwIP 方面有经验,希望不会给您带来不便,希望您能提供帮助,谢谢。

0 投票
1 回答
3600 浏览

gcc - 如何将 lwIP 原始源代码包含到我的项目中?

我目前正在使用 Atmel AT91SAM9260 评估板(具有多个外围设备的基于 ARM 的微控制器)实现一个简单的 tcp/ip 服务器。

Atmel 给出的一些示例包括基于 uIP 的 Web 服务器,但 uIP 无法处理所需的吞吐量。

我发现基于版本 1.1.1(或略高于)的相同示例对我来说已经足够了。

最近我开始遇到堆栈问题,我找不到使用更新版本的 lwIP 的 AT91SAM9260 的端口。为了构建项目,我使用 Eclipse+Yagarto+gcc 作为开发堆栈。

在将最新版本 1.4.0(可在http://download.savannah.gnu.org/releases/lwip/ 获得)的源代码替换到我的项目中并尝试修复所有编译错误之后,我放弃了。

源代码的结构非常相似,但显然需要进行太多调整。

是否有关于将原始源代码适应我的堆栈的具体指南?C++ 代码不应该只在我的堆栈上编译吗?

0 投票
1 回答
9420 浏览

c - 使用 lwIP 的原始 TCP API 时的性能问题

我使用 lwIP 为我的系统添加网络功能。在我的平台上,我构建了一个缓冲区,每次它都满时我想发送它。这可能会很快发生。该系统直接连接到专用 LAN 中的交换机。最初,数据的发送在 2 秒之间有一个非常大的时间间隔。此外,如果我的记忆正确,数据包的大小为 720 字节。使用的缓冲区目前有大约 20000 字节的容量,我可能会决定在未来增加这个容量。网络有 100 mbit 的速度,我想在我的平台上接近这些速度。

在寻找速度慢的原因时,我最终选择了 lwIP 的配置。在此之前,我改变了我的发送机制。我使用原始 lwIP API,目前我将数据编写如下:

我知道复制标志会影响性能,但添加它是因为我不想在实际发送数据之前覆盖数据。(并且标志不是主要问题,但一旦正常工作就需要打磨)在先前的解决方案中,我省略了标志,只是等待所有字节被确认(在通过调用 tcp_output 写入后强制发送数据之后()) 通过使用回调函数。(这可能是更糟糕的性能明智,我不认为这是相关的)

我对 lwIP 中的设置进行了一些尝试,这似乎有所不同。我认为窗口大小特别有影响,尽管我不太确定。目前我显着增加了窗口大小,即使我得到了一个数据包的突发,它们之间大约有 2 毫秒(而不是 2 秒!),随后是很长一段时间的“无”,然后又是一个突发。我希望它以它应该能够达到的速度连续发送,最多应该是 100 mbit,但至少 10 mbit 并不奇怪,对吧?

我加载了wireshark,看看发生了什么。

192.168.1.26 是我运行 windows 的台式电脑。192.168.1.192 是使用 lwIP 的嵌入式系统。

最初,我从桌面向 lwIP 系统发送一个启动请求,让系统知道它应该在每次缓冲区满时开始发送缓冲区。如果相关,这是跟踪的相应部分:

我相信这没关系,尽管我不确定。无论如何,在此之后实际发送发生。相关跟踪如下 开始时间是 207.992115,应该被认为是开始时间。预计与 7.177903 之间的差异:

看来我目前发送的东西比桌面 ACKing 更快。上述跟踪后的流量显示为黑条,如下所示:

现在在这一点之后有一个我无法解释的巨大延迟。下一个数据包在 345 秒到达,这是 135 秒的差异。(虽然在大多数情况下它有点少,但仍然太高了)它开始如下:

等等

后来虽然提到的延迟更短,但也会出现类似的问题。我的问题是:如何解决从我的平台发送缓慢的问题,我应该如何配置我的 lwIP 设置以获得体面/良好的结果?我想快速发送数据。(我的网络能够达到 100Mbps,越接近越好)我认为我目前完全搞砸了我的设置,但我不确定如何根据我的需要对其进行微调。以下是我的 lwipopts.h 中的一些(希望如此)相关设置

文件: