- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
美好的一天!
我想制作一个客户端并将其连接到 netcat 简单服务器。
1) 使用默认设置和#define 编译的库(唯一的东西——我设置了一些调试信息)2) 将 lib 链接到项目(工作正常)3)用ubuntu设置虚拟机并使netcat与
一起工作~$ sudo netcat -l -v 7
这意味着我们正在监听端口 7(七)。
Now I use ifconfig and get
inet addr:172.17.9.71
Bcast:172.17.11.255
Mask:255.255.252.0
暂时还好。
4) ping 和 telnet 工作正常 - 我看到它们可以访问 netcat。
我的 ifconfig 统计数据是
inet addr:172.17.9.165
Bcast:172.17.11.255
Mask:255.255.252.0
5) 现在我正在尝试使用我的客户端连接到 netcat 服务器,该客户端是使用 lwip 编写的输出是:
LWIP_HAVE_LOOPIF = 0
LWIP_HAVE_LOOPIF = 0
tcp_bind: bind to port 55555
tcp_connect to port 7
netif_default = -780756800
netif_is_up(netif_default) = 0
ip_route: No route to 172.17.9.71
connect err = -4
netif_default = -780756800
netif_is_up(netif_default) = 0
ip_route: No route to 172.17.9.71
ip_output: No route to 172.17.9.71
Assertion "mem_free: mem->used" failed at line 339 in ../../../../../lwip/src/core/mem.c
完整 list :
const char *helloworld = "hello world\n";
void hello_end(struct tcp_pcb *pcb, u8_t *state)
{
tcp_err(pcb, NULL);
tcp_recv(pcb, NULL);
tcp_sent(pcb, NULL);
tcp_poll(pcb, NULL, 0);
mem_free(state);
}
err_t hello_recv(void *arg, struct tcp_pcb *pcb, struct pbuf *p, err_t err)
{
u8_t *state = (u8_t *)arg;
u16_t len;
if (p == NULL)
if (*state == 255) /* close send */
hello_end(pcb, state);
else /* close not yet send */
*state |= 2;
else
{
len = p->tot_len;
pbuf_free(p);
tcp_recved(pcb, len);
}
return ERR_OK;
}
void hello_err(void *arg, err_t err)
{
mem_free(arg);
}
err_t hello_poll_close(void *arg, struct tcp_pcb *pcb)
{
u8_t *state = (u8_t *)arg;
if (tcp_close(pcb) == ERR_OK)
{
if ((*state & 2) == 2) /* close received */
hello_end(pcb, state);
else /* close not yet received */
*state = 255;
}
return ERR_OK;
}
err_t hello_connected(void *arg, struct tcp_pcb *pcb, err_t err)
{
tcp_write(pcb, helloworld, 12, 0);
return ERR_OK;
}
err_t hello_connect() {
lwip_init();
u8_t *state;
err_t err;
struct tcp_pcb *pcb;
ip_addr_t ipaddr;
IP4_ADDR(&ipaddr, 172,17,9,71);
if ((state = mem_malloc(1)) == NULL) {
return ERR_MEM;
}
*state = 1;
if ((pcb = tcp_new()) == NULL) {
mem_free(state);
return ERR_MEM;
}
tcp_arg(pcb, state);
tcp_err(pcb, hello_err);
tcp_recv(pcb, hello_recv);
tcp_sent(pcb, NULL);
tcp_poll(pcb, hello_poll_close, 10);
tcp_bind(pcb,IPADDR_ANY, 55555); //Bind ourselvs to the port 55555 and my own adress
err = tcp_connect(pcb, &ipaddr, 7, hello_connected);
if (err != ERR_OK) {
std::cout << "connect err = " << (int)err << std::endl;
mem_free(state);
tcp_abort(pcb);
}
getchar();
return ERR_OK;
}
int main(int argc, char** argv) {
err_t err = hello_connect();
if (err != ERR_OK) {
std::cout << "2err = " << err << std::endl;
}
std::cout << "End of Main" << std::endl;
return 0;
return 0;
}
从这里我开始认为问题是我没有设置 NETIF。
但我不知道怎么做。
我想我不希望 lwip 默认创建 tap0
(这使得
tap0 Link encap:Ethernet HWaddr 86:97:2c:64:b7:78
inet addr:192.168.1.1 Bcast:192.168.1.255 Mask:255.255.255.0
inet6 addr: fe80::8497:2cff:fe64:b778/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:33 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:500
RX bytes:0 (0.0 B) TX bytes:6555 (6.4 KiB)
)
我想将我的应用程序绑定(bind)到 localhost 或 eth1 - 无论怎样...我该怎么做?我在申请中做错了什么?
顺便说一下,当我这样做的时候
char *eth = "eht1";
netif_set_default(netif_find(eth));
在我的初始化函数中我得到了这个输出
WIP_HAVE_LOOPIF = 0
LWIP_HAVE_LOOPIF = 0
tcpip_thread: PACKET 0x7f72acaa1988
ip_input: packet not for us.
tcp_bind: bind to port 55555
tcp_connect to port 7
netif_default = 0
它落在
err = tcp_connect(pcb, &ipaddr, 7, hello_connected);
(没有通过...)
有人能帮忙吗?
最佳答案
它是您用来与服务器通信的以太网接口(interface)吗?在代码的 hello_connect() 函数中,初始化 lwIP 后,您需要为以太网接口(interface)分配和初始化一个“struct netif”对象,并使用 netif_add() 将其注册到 lwIP。您还需要使用 netif_set_default() 将其设置为默认接口(interface)。我不确定其余代码。为什么不直接使用套接字 API?
关于tcp - lwip 初始化网络接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24533089/
我有一个奇怪的问题。一段时间以来,我一直在尝试更换一个小型协议(protocol)转换器(基本上是以太网的双向串行...主站和从站),以获得具有更多功能的东西。 背景故事 经过大量的逆向工程,我发现了
我正在 ST Cortex M3 设备上创建服务器。我正在使用 lwip API 和 FreeRTOS。一切正常,但响应时间很慢。我目前使用的是 lwip 1.3.2 和 FreeRTOS 7.3。
目前我正在尝试在嵌入式板上移植 LWIP(轻量级 TCP/IP 堆栈)。 在查看代码的过程中,我想出了一个数组声明(在 memp.c 文件中),它看起来很奇怪,我过去从未见过这种类型的声明。 虽然它是
我正在为一个没有操作系统的嵌入式系统 (Zybo) 实现一个 TCP 客户端,我完全是 LwIP 的新手。在谷歌上搜索了一段时间后,我发现了一些关于如何使用它的示例。 我想知道是否有任何方法可以通过它
前言 。 前面章节太长了,不得不分开. 这里已源码为主,默认读者已知晓概念或原理,概念或原理可以参考前面章节,有分析. 参考:李柱明博客: https://www.cnblogs.co
前言 终于到接口层了. 原文:李柱明博客: https://www.cnblogs.com/lizhuming/p/17442931.html 。 。 框架描述 前面我们已经学完
我使用在stm32处理器(stm32f407)上使用的套接字api运行freeRTOS和lwip 1.4.1。 总的来说,它工作得很好。 我可以使用udp和tcp发送和接收数据。 但是在3到7天的时间
我正在 echo 服务器 lwIP 下使用以太网通信。我想通过以太网捕获从 DMA 到主机的样本。系统通过UART采集样本。 我无法让 lwIP 在不等待 ACK 的情况下发送超过 2 个高于 150
我有一个运行 LwIP 服务器 (v1.2) 的嵌入式系统,我需要能够将数据数组流式传输到客户端的 javascript 中吗?我正在考虑使用 chrome 和一些 HTML5 功能,所以有些人建议使
在浏览了 LWIP 文档之后,我写了一个简单的 tcp echo 服务器代码。为了编译它并创建一个可执行文件,我编写了以下 Makefile。现在,当我运行命令 make all 时,它会为包含在 m
我正在尝试从 lwip 定义“ip_addr”。那是我的代码: #include "lwip/tcp.h" #include "ip_addr.h" ... struct ip_addr ip; 但是
美好的一天! 我想制作一个客户端并将其连接到 netcat 简单服务器。 1) 使用默认设置和#define 编译的库(唯一的东西——我设置了一些调试信息)2) 将 lib 链接到项目(工作正常)3)
我看到了 lwIP有一些 AutoIP(又名 IPv4LL,又名 RFC 3927 )代码,但我不知道它是否在 Zeroconf 中做了任何更高的事情堆栈,即 mDNS 和 DNS-SD (与 RFC
简单地,我通过在接收回调函数中检查 pbuff 的有效负载来检查并获取发送到我的 microplaze 的数据,并且它可以在我可以看到 microplaze 回显我的消息的地方工作,但是当我尝试将它们
我正在将 LwIP 与 FreeRTOS 结合使用。我的项目基于此 URL FreeRTOS with LwIP project 上的示例。我还将 LPC1769 与 LPCXpresso 版本 6.
我正在使用Xilinx Ethernetlite(LWIP)设计。仅当buf = 32时,我才能通过以太网将数据从KC板传输到PC(Hercules)。但是我的实际缓冲区大小是1024。如何将缓冲区大
所以,我有一个有效的 TCP Echo 示例。我试图完成的是能够接收 TCP 传输,以及通过 TCP 和 UDP 发送数据。我正在使用原始 LWIP 并将有一个我将与之交互的 PC 应用程序。我希望能
在 echo 示例中,我们有这个函数可以再次发送相同的数据包,以便回显数据,我想更改它以便发送固定数据,无论用户发送什么,所以我更改了这个: err = tcp_write(tpcb, p->
我在读取和存储 TCP 服务器接收到的数据时遇到了问题。我正在使用 LWIP 库和 NUCLEO-F746ZG 板。我想我必须在执行 es->p 时获取数据。我读过,你必须使用 payload 但我不
在我的 STM32F7 上,我必须使用串行端口连接 3G 调制解调器。我可以使用 AT 命令与调制解调器通信。我想使用 LWIP 中的 PPPos(PPP over serial)库进入 PPP 模式
我是一名优秀的程序员,十分优秀!