lwip NETCONN 同时创建服务端和客户端代码
以下是一个示例代码,同时创建一个服务端和客户端:
#include "lwip/opt.h"
#include "lwip/api.h"
#include "lwip/sys.h"
#include "lwip/sockets.h"
#include "lwip/inet.h"
#define SERVER_PORT 1234
#define CLIENT_PORT 5678
static void server_thread(void *arg)
{
struct netconn *conn, *newconn;
err_t err;
char buffer[1024];
// 创建一个新的连接
conn = netconn_new(NETCONN_TCP);
if (conn != NULL) {
// 绑定到指定端口
err = netconn_bind(conn, NULL, SERVER_PORT);
if (err == ERR_OK) {
// 监听连接请求
err = netconn_listen(conn);
if (err == ERR_OK) {
while (1) {
// 等待新的连接
err = netconn_accept(conn, &newconn);
if (err == ERR_OK) {
// 读取客户端发送的数据
err = netconn_recv(newconn, &buffer, sizeof(buffer), NETCONN_COPY);
if (err == ERR_OK) {
// 处理数据
printf("Received data: %s\n", buffer);
// 发送响应数据
err = netconn_write(newconn, "Hello from server!", sizeof("Hello from server!"), NETCONN_COPY);
}
// 关闭连接
netconn_close(newconn);
netconn_delete(newconn);
}
}
}
}
// 关闭连接
netconn_close(conn);
netconn_delete(conn);
}
}
static void client_thread(void *arg)
{
struct netconn *conn;
err_t err;
char buffer[1024];
// 创建一个新的连接
conn = netconn_new(NETCONN_TCP);
if (conn != NULL) {
// 连接到服务端
err = netconn_connect(conn, IP_ADDR_ANY, SERVER_PORT);
if (err == ERR_OK) {
// 发送数据到服务端
err = netconn_write(conn, "Hello from client!", sizeof("Hello from client!"), NETCONN_COPY);
if (err == ERR_OK) {
// 读取服务端发送的响应数据
err = netconn_recv(conn, &buffer, sizeof(buffer), NETCONN_COPY);
if (err == ERR_OK) {
// 处理响应数据
printf("Received data: %s\n", buffer);
}
}
}
// 关闭连接
netconn_close(conn);
netconn_delete(conn);
}
}
int main()
{
sys_thread_new("server", server_thread, NULL, 1024, 0);
sys_thread_new("client", client_thread, NULL, 1024, 0);
while (1) {
// do nothing
}
return 0;
}
在这个示例中,我们创建了两个线程,一个用于运行服务端代码,另一个用于运行客户端代码。服务端代码创建了一个新的连接,绑定到指定端口,并监听连接请求。当有新的连接请求时,它会接受连接,读取客户端发送的数据,处理数据,并发送响应数据,然后关闭连接。客户端代码创建了一个新的连接,连接到服务端,并发送数据到服务端。然后它会读取服务端发送的响应数据,并处理数据,然后关闭连接。这个示例使用了lwIP的NETCONN API来实现服务端和客户端的功能
原文地址: https://www.cveoy.top/t/topic/dbGL 著作权归作者所有。请勿转载和采集!