Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
AT
sal 用于esp8266中的问题
发布于 2019-05-06 19:37:36 浏览:2005
订阅该版
首先 我已经给esp8266发送指令了,用的是[https://github.com/RT-Thread-packages/at_device](https://github.com/RT-Thread-packages/at_device) 里的at_socket_esp8266.c。将esp8266设置位tcp服务端。成功了。(ip:192.168.4.1 port:8089),用电脑电脑(TCP客户端)连接成功,并且可以收发数据。 接着想用sal接收 手机或者电脑(TCP客户端)发过来的数据,以及和发送给手机或者电脑 , 然后在上面加,我没理清是要建立tcp 服务端还是客户端,所以我两个都试了[list=1] (*)/* (*)* 程序清单:tcp 服务端 (*)* (*)* 这是一个 tcp 服务端的例程 (*)* 导出 tcpserv 命令到控制终端 (*)* 命令调用格式:tcpserv (*)* 无参数 (*)* 程序功能:作为一个服务端,接收并显示客户端发来的数据 ,接收到 exit 退出程序 (*)*/ (*)#include
(*)#include
/* 使用BSD socket,需要包含socket.h头文件 */ (*)#include
(*)#include
(*)#include
(*)#define BUFSZ (1024) (*)static const char send_data[] = "This is TCP Server from RT-Thread."; /* 发送用到的数据 */ (*)static void tcpserv(int argc, char **argv) (*){ (*) char *recv_data; /* 用于接收的指针,后面会做一次动态分配以请求可用内存 */ (*) socklen_t sin_size; (*) int sock, connected, bytes_received; (*) struct sockaddr_in server_addr, client_addr; (*) rt_bool_t stop = RT_FALSE; /* 停止标志 */ (*) int ret; (*) recv_data = rt_malloc(BUFSZ + 1); /* 分配接收用的数据缓冲 */ (*) if (recv_data == RT_NULL) (*) { (*) rt_kprintf("No memory
"); (*) return; (*) } (*) /* 一个socket在使用前,需要预先创建出来,指定SOCK_STREAM为TCP的socket */ (*)
if ((sock = socket(AF_AT, SOCK_STREAM, 0)) == -1)
(*) { (*) /* 创建失败的错误处理 */ (*) rt_kprintf("Socket error
"); (*) /* 释放已分配的接收缓冲 */ (*) rt_free(recv_data); (*) return; (*) } (*)
/* 初始化服务端地址 */ (*) server_addr.sin_family = AF_AT; (*) server_addr.sin_port = htons(8089); /* 服务端工作的端口 */ (*) server_addr.sin_addr.s_addr = ((u32_t)0xC0A80401UL);; // IP地址 192.168.4.1
(*) (*) rt_memset(&(server_addr.sin_zero), 0, 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("
TCPServer Waiting for client on port 8089...
"); (*) while (stop != RT_TRUE) (*) { (*) sin_size = sizeof(struct sockaddr_in); (*) /* 接受一个客户端连接socket的请求,这个函数调用是阻塞式的 */ (*) connected = accept(sock, (struct sockaddr *)&client_addr, &sin_size); (*) /* 返回的是连接成功的socket */ (*) if (connected< 0) (*) { (*)
rt_kprintf("accept connection failed! errno = %d
", errno);
(*) continue; (*) } (*) /* 接受返回的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 */ (*) ret = send(connected, send_data, strlen(send_data), 0); (*) if (ret < 0) (*) { (*) /* 发送失败,关闭这个连接 */ (*) closesocket(connected); (*) rt_kprintf("
send error,close the socket.
"); (*) break; (*) } (*) else if (ret == 0) (*) { (*) /* 打印send函数返回值为0的警告信息 */ (*) rt_kprintf("
Send warning,send function return 0.
"); (*) } (*) /* 从connected socket中接收数据,接收buffer是1024大小,但并不一定能够收到1024大小的数据 */ (*) bytes_received = recv(connected, recv_data, BUFSZ, 0); (*) if (bytes_received < 0) (*) { (*) /* 接收失败,关闭这个connected socket */ (*) closesocket(connected); (*) break; (*) } (*) else if (bytes_received == 0) (*) { (*) /* 打印recv函数返回值为0的警告信息 */ (*) rt_kprintf("
Received warning,recv function return 0.
"); (*) closesocket(connected); (*) break; (*) } (*) /* 有接收到数据,把末端清零 */ (*) recv_data[bytes_received] = '\0'; (*) if (strcmp(recv_data, "q") == 0 || strcmp(recv_data, "Q") == 0) (*) { (*) /* 如果是首字母是q或Q,关闭这个连接 */ (*) closesocket(connected); (*) break; (*) } (*) else if (strcmp(recv_data, "exit") == 0) (*) { (*) /* 如果接收的是exit,则关闭整个服务端 */ (*) closesocket(connected); (*) stop = RT_TRUE; (*) break; (*) } (*) else (*) { (*) /* 在控制终端显示收到的数据 */ (*) rt_kprintf("RECEIVED DATA = %s
", recv_data); (*) } (*) } (*) } (*) /* 退出服务 */ (*) closesocket(sock); (*) /* 释放接收缓冲 */ (*) rt_free(recv_data); (*) return ; (*)} [/list] 复制代码 效果:首先用电脑创建的tcp客户端连接上,是可以发送和接收数据的。这一部分执行的是at_socket_esp8266.c的程序。 接着在终端命令行上敲 tcpserv ,一直显示 accept connection failed! errno = 0 不知道是不是 at_socket_esp8266.c 和 tcpserv 冲突。 接着我试了试建 tcp 客户端 还是不行.
查看更多
4
个回答
默认排序
按发布时间排序
armink
2019-05-07
这家伙很懒,什么也没写!
8266 现在应该不支持 tcp 服务器模式的,可以用客户端模式
w1019564793
2019-05-07
这家伙很懒,什么也没写!
>8266 现在应该不支持 tcp 服务器模式的,可以用客户端模式 --- 您好,我在 at_socket_esp8266.c 文件中,加入了 AT_SEND_CMD(resp, "AT+CWMODE=3\r\n"); AT_SEND_CMD(resp, "AT+CIPSERVER=1,8089\r\n");.建立了tcpserve。 用pc连接wifiesp8266. 然后再pc端建立tcpclient.数据传输成功。 我又看了其他的贴子,他说必须用sal组件。然后就是不知道怎么用
armink
2019-05-07
这家伙很懒,什么也没写!
>您好,我在 at_socket_esp8266.c 文件中,加入了 AT_SEND_CMD(resp, "AT+CWMODE=3\r\n"); AT_SEND ... --- 你这样是可以的,但是不是标准的 BSD socket API 。 例程里用的是标准的通信接口,而不是带有 at 字样的
Easadon
2020-04-16
这家伙很懒,什么也没写!
您好,请问您是怎么添加的,我设置之后也还是出错啊,能把完整代码(或者修改的部分代码)给我参考一下吗
撰写答案
登录
注册新账号
关注者
0
被浏览
2k
关于作者
w1019564793
这家伙很懒,什么也没写!
提问
18
回答
37
被采纳
0
关注TA
发私信
相关问题
1
rt-thread 2g/3g/4g通信模块的教程有吗?
2
基于AT指令,用esp8266如何连接mqtt?
3
AT组件使用问题
4
官方AT客户端应用笔记的几个小tip
5
RTT的SAL能够判断使用LWIP或者AT?
6
rt_therad AT组件移植不成功(结贴)
7
AT组件在哪个版本的?
8
AT组件 连接 Onenet 连接失败
9
esp8266 AT指令 MQTT连接问题
10
AT组件使用问题之模块主动上报【已解决】
推荐文章
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-thred的stm32h723对应bsp包CubeMX添加其他外设报错
2
RT-Thread中的time溢出问题,时间戳溢出,解决方法
3
ART-PI使用env驱动ETH网卡,pc和板子可以ping通
4
SystemView线程名字不显示
5
只用网页也能跑RT-Smart 无门槛腾讯Cloud studio + smart-build快速构建
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
DMA
USB
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
rt-smart
FAL
I2C_IIC
UART
ESP8266
cubemx
WIZnet_W5500
ota在线升级
PWM
BSP
flash
freemodbus
packages_软件包
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
编译报错
中断
Debug
rt_mq_消息队列_msg_queue
keil_MDK
ulog
SFUD
msh
C++_cpp
MicroPython
本月问答贡献
RTT_逍遥
9
个答案
2
次被采纳
三世执戟
8
个答案
1
次被采纳
KunYi
8
个答案
1
次被采纳
winfeng
2
个答案
1
次被采纳
YZRD
2
个答案
1
次被采纳
本月文章贡献
catcatbing
2
篇文章
5
次点赞
swet123
1
篇文章
4
次点赞
Days
1
篇文章
4
次点赞
YZRD
1
篇文章
2
次点赞
阳光的掌控者
1
篇文章
1
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部