Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
Network
lwip总算ping通了
发布于 2019-01-20 21:28:59 浏览:2849
订阅该版
感谢@aozima @whj467467222 @summer_gift 几位大佬的热心帮助,总算成功Ping通!但是还有一个问题,我要怎么将我的tcpserv函数导入到shell中?输入help之后我的tcpserv还是没有shell命令,是我的操作方式不对吗?  应该怎么样将它导入?下面是我的tcpserv函数 ```static const char send_data[] = "This is TCP Server from RT-Thread!
"; /*发送用到的数据*/ void tcpserv(void){ char *recv_data; /*用于接受用的指针, 后面会做一次动态分配以请求内存 */ rt_uint32_t sin_size; int sock, connected, bytes_received; struct sockaddr_in server_addr, client_addr; rt_bool_t stop = RT_FALSE; /*停止标志*/ recv_data = rt_malloc(1024); /*分配接收用的数据缓冲*/ if(recv_data == RT_NULL){ rt_kprintf("No Memory!
"); return; } /*一个socket在使用之前,需要先预先创建出来,指定SOCK_STREAM为TCP的socket */ if((sock = socket(AF_INET, SOCK_STREAM, 0)) == -1){ /*创建失败的错误处理*/ rt_kprintf("socket error!
"); /*释放已经分配的接收缓存*/ rt_free(recv_data); return; } /*初始化服务器地址*/ server_addr.sin_family = AF_INET; server_addr.sin_port = htons(5000); /*服务器工作的端口*/ server_addr.sin_addr.s_addr = INADDR_ANY; rt_memset(&(server_addr.sin_zero), 8, sizeof(server_addr.sin_zero)); /*绑定socket到服务端地址*/ if(bind(sock, (struct sockaddr *)&server_addr, sizeof(struct sockaddr)) == -1){ /*绑定失败*/ rt_kprintf("Unable to bind!
"); /*释放已经分配的缓存*/ rt_free(recv_data); return; } /*在socket上进行监听*/ if(listen(sock, 5) == -1){ rt_kprintf("listen error!
"); /* release recv buffer*/ rt_free(recv_data); return; } rt_kprintf("
TCPSever waiting for client on port 5000..
!"); while(stop != RT_TRUE){ sin_size = sizeof(struct sockaddr_in); /*接受一个客户端连接socket的请求,这个函数调用时阻塞式的*/ connected = accept(sock, (struct sockaddr *)&client_addr, &sin_size); /*返回链接成功的socket*/ /*接收返回的client_addr指向客户端的地址信息*/ rt_kprintf("I got a connection from (%s, %d)
", inet_ntoa(client_addr.sin_addr), ntohs(client_addr.sin_port)); /*客户端连接的处理*/ while(1){ /*发送数据到connected socket*/ send(connected, send_data, strlen(send_data), 0); /*从connect socket中接收数据,接收buffer是1024大小,但并不一定能够收到1024大小*/ bytes_received = recv(connected, recv_data, 1024, 0); if(bytes_received <= 0){ /*接收失败,关闭这个connected socket*/ lwip_close(connected); break; } /*接收到数据,把末端清0*/ recv_data[bytes_received] = '\0'; if(strcmp(recv_data, "q") == 0 || strcmp(recv_data, "Q") == 0){ /*如果首字母是q或者Q,关闭这个连接*/ lwip_close(connected); break; } else if(strcmp(recv_data, "exit") == 0){ /*如果接收的是eixt,则关闭整个服务器*/ lwip_close(connected); stop = RT_TRUE; break; } else{ /*在控制终端显示收到的数据*/ rt_kprintf("Received Data = %s
", recv_data); } } } /*退出服务*/ lwip_close(sock); /*释放接收缓存*/ rt_free(recv_data); return; } #ifdef RT_USING_FINSH #include
/*输出tcpserv函数到finsh shell中*/ FINSH_FUNCTION_EXPORT(tcpserv, startup tcp server); #endif```
查看更多
5
个回答
默认排序
按发布时间排序
aozima
2019-01-21
调网络不抓包,调I2C等时序不上逻辑分析仪,就像电工不用万用表!多用整理的好的文字,比截图更省流量,还能在整理过程中思考。
看来有必要同时提供msh和finsh的命令才行。 楼主使用 MSH_CMD_EXPORT 来导出命令。
chenghaiyang
2019-01-21
这家伙很懒,什么也没写!
>看来有必要同时提供msh和finsh的命令才行。 >楼主使用 MSH_CMD_EXPORT 来导出命令。 ... --- 好的谢谢
chenghaiyang
2019-01-21
这家伙很懒,什么也没写!
>看来有必要同时提供msh和finsh的命令才行。 >楼主使用 MSH_CMD_EXPORT 来导出命令。 ... --- 成功导出到了shell中,谢谢帮助。[attach]7295[/attach] 但是我在使用网络调试助手连接我的tcpserv的时候,连接不上,选择的是TCPclient模式,IP正确。 [attach]7297[/attach] 下方会出现这样的提示信息:[attach]7298[/attach] 我使用了wireshark进行抓包,结果如下: [attach]7296[/attach] 请问,为什么我的问题出在什么地方啊?
aozima
2019-01-21
调网络不抓包,调I2C等时序不上逻辑分析仪,就像电工不用万用表!多用整理的好的文字,比截图更省流量,还能在整理过程中思考。
netstat看看,另外检查下 rtconfig.h的连接数和socket/fd数量是否足够
chenghaiyang
2019-01-21
这家伙很懒,什么也没写!
>netstat看看,另外检查下 rtconfig.h的连接数和socket/fd数量是否足够 --- netstat之后是这样一个情况: [attach]7301[/attach] 连接数是这些吗? [attach]7302[/attach]
撰写答案
登录
注册新账号
关注者
0
被浏览
2.8k
关于作者
chenghaiyang
这家伙很懒,什么也没写!
提问
3
回答
15
被采纳
0
关注TA
发私信
相关问题
1
lwip1.4.1连接经常会断开无法连接上,可以ping通
2
LPC1768:RTT+LWIP+webserver用IE刷网页出现硬件中断错误(已经解决)
3
求一些LWIP开发的经验,目前ping一直不稳定。
4
stm32f207+dp83848无法ping通
5
RTT下的LWIP传递机制
6
rtt内lwip的socket是否是线程安全?
7
Lwip+enc28j60无法ping通
8
坑爹的rtconfig.h lwip关掉了checksum
9
花了一个晚上,把RT2.0的LWIP、网卡驱动、文件系统整合起来了,发现一点小问题
10
lwip例程中udp发送时如何指定源端口发送到指定目的地端口
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
最新文章
1
基于RT-Thread的STM32F4开发第五讲——软件模拟I2C
2
关于vscode env gcc工具链下,使用其他下载器(cmsis-dap)的launch.json编写
3
新版OneNet的星火1号开发板例程适配(一)
4
rtthread设备驱动学习笔记与做artpi2的can设备驱动修改
5
基于RT-Thread的STM32F4开发第四讲——硬件定时器更新中断(缺失补齐教程)
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
DMA
USB
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
FAL
RTC
rt-smart
I2C_IIC
cubemx
UART
ESP8266
WIZnet_W5500
BSP
ota在线升级
PWM
flash
packages_软件包
freemodbus
潘多拉开发板_Pandora
ADC
GD32
定时器
编译报错
flashDB
keil_MDK
socket
中断
rt_mq_消息队列_msg_queue
Debug
ulog
SFUD
msh
C++_cpp
at_device
本月问答贡献
出出啊
1524
个答案
343
次被采纳
小小李sunny
1444
个答案
290
次被采纳
张世争
821
个答案
179
次被采纳
crystal266
555
个答案
162
次被采纳
whj467467222
1222
个答案
149
次被采纳
本月文章贡献
Pai同学
7
篇文章
10
次点赞
RTT_逍遥
1
篇文章
6
次点赞
加缪
1
篇文章
1
次点赞
WenShan
1
篇文章
1
次点赞
Rick98
1
篇文章
1
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部