LwIP 实现
LwIP implementation
我正在为一个没有 OS 的嵌入式系统 (Zybo) 实现一个 TCP 客户端,我完全是 LwIP 的新手。在谷歌上搜索了一段时间后,我发现了一些关于如何使用它的示例。
我想知道是否有任何方法可以通过它发送 C 结构,是否有可用的示例。服务器是在Linux下的另一个Zybo板上实现的,它处理许多结构来控制状态机,所以它非常关键。
提前致谢。
LwIP 有一个 TCP 堆栈实现,因此它能够(几乎?)常规 TCP 堆栈可以做的所有事情。
当然,它允许您通过套接字发送任意数据。标准堆栈和 LwIP 都没有对序列化(您可能想要的)的任何特定支持。
您将需要定义一个协议,用于将您的结构序列化为字符数组,发送该数组,在另一端接收它并反序列化它。序列化结构的一种方法是所谓的 entity-serialization - 只需发送结构的原始内存占用并在另一端接收它。这是非常简单、非常快速但非常不可靠的方法——如果同一结构的内存布局在发送方和接收方之间不同怎么办?随着程序的发展,向结构中添加新字段也变得很困难(您总是必须在最后添加它们),并且几乎不可能删除字段。
更好的方法是真正了解各种序列化方法并找出最适合您的方法。
通过使用 memcpy 函数解决了问题,类似于:
typedef struct{
int ID;
char name [100];
int order;
}MESSAGE;
MESSAGE msg;
char b [sizeof(MESSAGE)];
memcpy(b, &msg, sizeof(MESSAGE));
这样做之后,它只是通过套接字发送字节数组。
无论如何,感谢您的帮助。
我正在为一个没有 OS 的嵌入式系统 (Zybo) 实现一个 TCP 客户端,我完全是 LwIP 的新手。在谷歌上搜索了一段时间后,我发现了一些关于如何使用它的示例。
我想知道是否有任何方法可以通过它发送 C 结构,是否有可用的示例。服务器是在Linux下的另一个Zybo板上实现的,它处理许多结构来控制状态机,所以它非常关键。
提前致谢。
LwIP 有一个 TCP 堆栈实现,因此它能够(几乎?)常规 TCP 堆栈可以做的所有事情。
当然,它允许您通过套接字发送任意数据。标准堆栈和 LwIP 都没有对序列化(您可能想要的)的任何特定支持。
您将需要定义一个协议,用于将您的结构序列化为字符数组,发送该数组,在另一端接收它并反序列化它。序列化结构的一种方法是所谓的 entity-serialization - 只需发送结构的原始内存占用并在另一端接收它。这是非常简单、非常快速但非常不可靠的方法——如果同一结构的内存布局在发送方和接收方之间不同怎么办?随着程序的发展,向结构中添加新字段也变得很困难(您总是必须在最后添加它们),并且几乎不可能删除字段。
更好的方法是真正了解各种序列化方法并找出最适合您的方法。
通过使用 memcpy 函数解决了问题,类似于:
typedef struct{
int ID;
char name [100];
int order;
}MESSAGE;
MESSAGE msg;
char b [sizeof(MESSAGE)];
memcpy(b, &msg, sizeof(MESSAGE));
这样做之后,它只是通过套接字发送字节数组。 无论如何,感谢您的帮助。