AT ESP8266 telnet 失败

发布于 2019-08-05 22:02:22

目的: ESP8266 实现 wifi 下运行telnet 进行finish 操作,


操作:
1,开启telnet 模块

[img=110,0][/img]
2 开启 AT ESP8266驱动
[img=110,0]https://www.rt-thread.org/qa/forum.php?mod=image&aid=9897&size=300x300&key=452aa62b1d88779b&nocache=yes&type=fixnone[/img]

3 开启AT 组件
[img=110,0]https://www.rt-thread.org/qa/forum.php?mod=image&aid=9898&size=300x300&key=8e9755b1f6d8787a&nocache=yes&type=fixnone[/img]
4 开启SAL
[img=110,0]https://www.rt-thread.org/qa/forum.php?mod=image&aid=9899&size=300x300&key=d4b9203d1c45e118&nocache=yes&type=fixnone[/img]
5 修改telnet.c 里的 AF_INET 替换 AF_AT
#define AF_INET_temp AF_AT (这句是我加的 )
static void telnet_thread(void* parameter)
{
#define RECV_BUF_LEN 64

struct sockaddr_in addr;
socklen_t addr_size;
rt_uint8_t recv_buf[RECV_BUF_LEN];
rt_int32_t recv_len = 0;

if ((telnet->server_fd = socket(AF_INET_temp, SOCK_STREAM, 0)) == -1)
{
rt_kprintf("telnet: create socket failed\n");
return;
}

addr.sin_family = AF_INET_temp;
addr.sin_port = htons(TELNET_PORT);
addr.sin_addr.s_addr = INADDR_ANY;
rt_memset(&(addr.sin_zero), 0, sizeof(addr.sin_zero));
if (bind(telnet->server_fd, (struct sockaddr *) &addr, sizeof(struct sockaddr)) == -1)
{
rt_kprintf("telnet: bind socket failed\n");
return;
}


6 ,测试后 出现问题

发现 AT+CIPCLOSE 失败
[img=110,0]https://www.rt-thread.org/qa/forum.php?mod=image&aid=9900&size=300x300&key=d316576cfd6c48ba&nocache=yes&type=fixnone[/img]
CLI 模式下直接发AT 命令
AT+CIPSTATUS
STATUS:4

OK

4代表失去 连接
发现以问题 , telnet 流程下先关闭 TCP 但是

AT+CIPCLOSE=0
UNLINK

ERROR


这里有个ERROR 导致 at_client 文件下的函数 at_obj_exec_cmd
if (client->resp_status != AT_RESP_OK)
{
cmd = at_get_last_cmd(&cmd_size);
LOG_E("execute command (%.*s) failed!", cmd_size, cmd);
result = -RT_ERROR;
goto __exit;
}
}


然后报了错误 导致 bind 失败
if (bind(telnet->server_fd, (struct sockaddr *) &addr, sizeof(struct sockaddr)) == -1)
{
rt_kprintf("telnet: bind socket failed\n");
return;
}


请问:
telnet.c 里的bind 干啥了,为啥回去关TCP?
ESP8266 下telnet 怎么实现 有例子 吗?
官网的代码怎么实现telnet呢?







4eb88e275a1c2564a8e257daa7e0964.png
1565012331(1).jpg
1565012079(1).jpg
1565011960(1).jpg
1565011750(1).jpg

查看更多

关注者
0
被浏览
950
4 个回答
Cheney_Chen
Cheney_Chen 2019-08-06
AT Socket 只支持作为客户端吧,telnet 作为服务器应该不能使用
RT-WH
RT-WH 2019-08-06
你好 我的理解是 只要esp8266模块能开tcp服务端
应该就能进行telnet了,不知道理解对不对
yqiu
yqiu 2019-08-06
esp8266 模块本身是支持服务器端的,AT Socket 组件还没有支持这个功能特性,如果需要支持 esp8266 模块的服务器端功能,当前只有修改 AT Socket 组件的。
于周斐
于周斐 2019-11-14
楼主,解决这个问题了没?,我也碰到了

撰写答案

请登录后再发布答案,点击登录

发布
问题

分享
好友