LWIP+TCP服务器

一、完整代码

tcp_server.c

cpp 复制代码
#include "tcp_server.h"
#include <stdlib.h>
#include <stdio.h>
#include <string.h>

void Tcp_Server_Init(void)
{
	struct tcp_pcb *tcp_server_pcb;

	/* 为tcp服务器分配一个tcp_pcb结构体    */
	tcp_server_pcb = tcp_new();

	/* 绑定本地端号和IP地址 */
	tcp_bind(tcp_server_pcb, IP_ADDR_ANY, 8080);

	/* 监听之前创建的结构体tcp_server_pcb */
	tcp_server_pcb = tcp_listen(tcp_server_pcb);

	/* 初始化结构体接收回调函数 */
	tcp_accept(tcp_server_pcb, tcp_server_accept);
}

static err_t tcp_server_accept(void *arg, struct tcp_pcb *pcb, err_t err)
{
	/* 配置接收回调函数 */
	tcp_recv(pcb, tcp_server_recv);

    return ERR_OK;
}


static err_t tcp_server_recv(void *arg, struct tcp_pcb *pcb, struct pbuf *tcp_recv_pbuf, err_t err)
{
	struct pbuf *tcp_send_pbuf;

	if (tcp_recv_pbuf != NULL)
	{
		/* 扩大收发数据的窗口 */
		tcp_recved(pcb, tcp_recv_pbuf->tot_len);

		/* 将接收的数据拷贝给发送结构体 */
		tcp_send_pbuf = tcp_recv_pbuf;
		
		/* 将接收到的数据再转发出去 */
		tcp_write(pcb, tcp_send_pbuf->payload, tcp_send_pbuf->len, 1);

		pbuf_free(tcp_recv_pbuf);
	}
	return ERR_OK;
}

tcp_server.h

cpp 复制代码
#ifndef __TCP_SERVER_H
#define __TCP_SERVER_H


#include "lwip/debug.h"
#include "lwip/stats.h"
#include "lwip/tcp.h"
#include "lwip/memp.h"
#include "lwip/mem.h"
#include "lwip_comm.h"


void Tcp_Server_Init(void);
static err_t tcp_server_accept(void *arg, struct tcp_pcb *pcb, err_t err);
static err_t tcp_server_recv(void *arg, struct tcp_pcb *pcb, struct pbuf *tcp_recv_pbuf, err_t err);

#endif

二、注意事项

运行一个之前已经成功的客户端代码时,如果出现设备从客户端到服务器的转变,他们会出现长时间的ping不通的情况,那么就再次执行一次下面改变主机的步骤,然后按一下复位,再次运行,就可以正常通信。

相关推荐
sulikey1 小时前
Linux基础指令与权限管理深度解析:从入门到精通
linux·运维·服务器·ubuntu·centos·linux命令·linux权限
xu_yule1 小时前
网络和Linux网络-3(套接字编程)TCP网络通信代码
linux·网络·tcp/ip
周杰伦fans2 小时前
C# - Task 是什么?想象一下你在餐厅点餐
服务器·开发语言·c#
喜欢吃豆3 小时前
使用 OpenAI Responses API 构建生产级应用的终极指南—— 状态、流式、异步与文件处理
网络·人工智能·自然语言处理·大模型
HalvmånEver3 小时前
Linux:进程的切换与调度(进程四)
linux·运维·服务器
xixixi777773 小时前
解析一下存储安全——“它是什么”,更是关于“它为何存在”、“如何实现”以及“面临何种挑战与未来”
网络·安全·通信
运维有小邓@3 小时前
实时日志关联分析工具:智能检测潜在安全威胁
运维·网络·安全
泡沫·4 小时前
8.项目实战:Ecshop
服务器
j***57684 小时前
电脑可以连接wifi,但是连接后仍然显示没有网络
网络·电脑·php
脏脏a4 小时前
【Linux】Linux进程状态深度解析
linux·运维·服务器