社区
驱动开发/核心开发
帖子详情
lwip 的UDP 服务端怎么建立的啊?
zynh1020
2010-11-05 08:56:38
有没有哪位搞过LWIP的,UDP服务器端口是怎么建立的啊?最好给个源代码啊?
非常感谢呢
...全文
763
6
打赏
收藏
lwip 的UDP 服务端怎么建立的啊?
有没有哪位搞过LWIP的,UDP服务器端口是怎么建立的啊?最好给个源代码啊? 非常感谢呢
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
6 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
hb_haitao2009
2011-10-21
打赏
举报
回复
#define HostIP "192.168.100.120"
void app_tcp_client_thread(void *pvar)
{
static rt_tick_t net_off_timer;
struct hostent *host;
int sock, err,len;//,optval;
fd_set r_fd,w_fd;
struct sockaddr_in server_addr;
struct timeval timeout;
char recv_buf[100];
timeout.tv_sec = 0;
timeout.tv_usec = 50000;
for (;;)
{
while(1)
{
rt_thread_delay(RT_TICK_PER_SECOND*2);
host = gethostbyname(HostIP);
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(6001);
server_addr.sin_addr = *((struct in_addr *)host->h_addr);
rt_memset(&(server_addr.sin_zero), 0, sizeof(server_addr.sin_zero));
sock = socket(AF_INET, SOCK_STREAM, 0);
if (sock == -1)
{
rt_kprintf("tcp_client_test: create socket fail!\r\n");
if (net_off_timer == 0)
net_off_timer = rt_tick_get();
if (rt_tick_get() - net_off_timer > 30000/10)
{
net_off_timer = 0;
lwip_close(sock);
rt_kprintf("tcp_client_test: reset socket!\r\n");
break;
}
gnet_conn = 0;
continue;
}
conn:
rt_thread_delay(RT_TICK_PER_SECOND * 30);
err = connect(sock, (struct sockaddr *)&server_addr, sizeof(struct sockaddr));
if (err == 0)
{
rt_kprintf("tcp_client_test: connect ok!\r\n");
gnet_conn = 1;
break;
}
//rt_thread_delay(RT_TICK_PER_SECOND * 30);
}
while(1)
{
FD_ZERO(&r_fd);
FD_ZERO(&w_fd);
FD_SET(sock,&r_fd);
FD_SET(sock,&w_fd);
if (lwip_get_error(sock) != 0)
{
gnet_conn = 0;
rt_kprintf("tcp_app_client_thread: sock = %d\n",lwip_get_error(sock));
//break;
goto conn;
}
select(sock+1,&r_fd,&w_fd,NULL,&timeout);
if (FD_ISSET(sock,&r_fd))
{
if ((len = recv(sock,&recv_buf,100,0)) > 0)
{
rt_kprintf("tcp_app_client_thread: recv data len = %d,%s\r\n",len,recv_buf);
}
else
{
gnet_conn = 0;
break;
}
}
else if (FD_ISSET(sock,&w_fd))
{
len = send(sock, send_data, 64, 0);
if (len < 0)
{
rt_kprintf("tcp_app_client_thread: send data fail!\r\n");
}
}
rt_thread_delay(1);
}
}
}
hb_haitao2009
2011-10-21
打赏
举报
回复
#define HostIP "192.168.100.120"
void app_tcp_client_thread(void *pvar)
{
static rt_tick_t net_off_timer;
struct hostent *host;
int sock, err,len;//,optval;
fd_set r_fd,w_fd;
struct sockaddr_in server_addr;
struct timeval timeout;
char recv_buf[100];
timeout.tv_sec = 0;
timeout.tv_usec = 50000;
for (;;)
{
while(1)
{
rt_thread_delay(RT_TICK_PER_SECOND*2);
host = gethostbyname(HostIP);
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(6001);
server_addr.sin_addr = *((struct in_addr *)host->h_addr);
rt_memset(&(server_addr.sin_zero), 0, sizeof(server_addr.sin_zero));
sock = socket(AF_INET, SOCK_STREAM, 0);
if (sock == -1)
{
rt_kprintf("tcp_client_test: create socket fail!\r\n");
if (net_off_timer == 0)
net_off_timer = rt_tick_get();
if (rt_tick_get() - net_off_timer > 30000/10)
{
net_off_timer = 0;
lwip_close(sock);
rt_kprintf("tcp_client_test: reset socket!\r\n");
break;
}
gnet_conn = 0;
continue;
}
conn:
rt_thread_delay(RT_TICK_PER_SECOND * 30);
err = connect(sock, (struct sockaddr *)&server_addr, sizeof(struct sockaddr));
if (err == 0)
{
rt_kprintf("tcp_client_test: connect ok!\r\n");
gnet_conn = 1;
break;
}
//rt_thread_delay(RT_TICK_PER_SECOND * 30);
}
while(1)
{
FD_ZERO(&r_fd);
FD_ZERO(&w_fd);
FD_SET(sock,&r_fd);
FD_SET(sock,&w_fd);
if (lwip_get_error(sock) != 0)
{
gnet_conn = 0;
rt_kprintf("tcp_app_client_thread: sock = %d\n",lwip_get_error(sock));
//break;
goto conn;
}
select(sock+1,&r_fd,&w_fd,NULL,&timeout);
if (FD_ISSET(sock,&r_fd))
{
if ((len = recv(sock,&recv_buf,100,0)) > 0)
{
rt_kprintf("tcp_app_client_thread: recv data len = %d,%s\r\n",len,recv_buf);
}
else
{
gnet_conn = 0;
break;
}
}
else if (FD_ISSET(sock,&w_fd))
{
len = send(sock, send_data, 64, 0);
if (len < 0)
{
rt_kprintf("tcp_app_client_thread: send data fail!\r\n");
}
}
rt_thread_delay(1);
}
}
}
rickys2080
2011-08-01
打赏
举报
回复
[Quote=引用 3 楼 chentao_110 的回复:]
我也要关注呢 楼上的能否跟我联系下 一起学习 我有开发板 神舟的 99252598 qq
[/Quote]
好啊
涛哥110
2011-08-01
打赏
举报
回复
我也要关注呢 楼上的能否跟我联系下 一起学习 我有开发板 神舟的 99252598 qq
rickys2080
2011-07-24
打赏
举报
回复
最近我也在搞这个
zynh1020
2010-11-08
打赏
举报
回复
大家说说 如果TCP服务器通信正常,那么TCP的客户端算不算成功了
LPC1768_rt-thread_
Lwip
.zip_
LwIP
_RT
LWIP
_RT-Thread_
lwip
_
udp
_接收_m
TCP
服务端
,
UDP
服务端
,把接收到TCP客户端的信号后转发到
UDP
客户端
UDP
不同网段内网NAT穿透实列(经本人测试成功穿透)
这个项目是我最近花了半个多月做出来的,
UDP
在外网环境中不同网段的NAT穿透,网上很多的 资料,但是基本上都是理论知识,而且java的代码很少。 我光是找资料就花了100多积分,经过这些天的努力, 终于被我解决了这个问题。现将完整项目共享给大家。 在test包下面有一个
服务端
,以及两个客户端。 经过本人测试实现了NAT内网的穿透。 骗子死全家。
鸿蒙系列课程:Hi3861网络编程实验
2、
UDP
/TCP实验 介绍
UDP
/TCP协议、调试工具、
LwIP
的Socket接口;基于Socket编程实现
UDP
Client/Server;基于Socket编程实现 TCP Client/Server。 3、MQTT实验 介绍MQTT协议、调试工具、Paho MQTT C/C++ client ...
STM32F4
LWIP
UDP
Demo
基于
LWIP
的
UDP
实例 本工程硬件基于STM32F429+LAN8720A外设,使用RMII通信接口。工程由STM32CUBEMX直接生成。代码主要使用的是ST官方例程。 1. 服务器端 //定义端口号 #define
UDP
_SERVER_PORT 7 /* define the
UDP
local connection port */ #define
UDP
_CLIENT_PORT 7 /* define the
UDP
remote connection port */ //声
LWip
UDP
编写
下方的代码包含连接、关闭,
UDP
发送原理是将 “
udp
控制块” 发送给远程服务器,由于
udp
无需连接代码较为简单,在发送时如果要更改大小端及编号需修改发送的数据,当发送的字节超过1500以后要开启相关设置,代码中temp是发送的数组,单位uint16_t(unsigne short)数组。
lwip
使用回调机制返回数据,当接收到网卡数据后,自动调用相关函数分析数据包是那种数据包(
udp
、tcp),再把数据包发送给相关协议栈处理。
udp
协议编写流程: 连接-发送数据-关闭客户端。
udp
接收函数的编写。
驱动开发/核心开发
21,600
社区成员
21,708
社区内容
发帖
与我相关
我的任务
驱动开发/核心开发
硬件/嵌入开发 驱动开发/核心开发
复制链接
扫一扫
分享
社区描述
硬件/嵌入开发 驱动开发/核心开发
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章