AT ESP8266 telnet 失败

2019-8-5 22:02 [复制链接] 4 373

: w# M2 L# d0 z( W' T
目的:  ESP8266  实现 wifi  下运行telnet  进行finish 操作,
7 _6 m" w. q# \9 e4 L7 m
0 t5 B  n5 T$ A2 u& T
, F2 ]5 U- i6 ~  N5 _6 X) G操作:/ {3 o1 `1 L2 Z/ x; ?8 L4 Q
1,开启telnet 模块
& e6 L7 u2 B+ Y7 h
6 c- W) Y- x! v- P5 f( |8 b( ~4 q
2 开启 AT ESP8266驱动
* `7 h( m4 i4 Z& M& S  q- X4 s0 j; n5 {' }! {6 x7 S

& {( C% |, k8 t/ _1 k/ a3 开启AT 组件
9 O& U+ [+ D! I, l! x8 u5 u( z) k# W( [4 t" t; [1 ^. X! a  b
4  开启SAL
5 |6 x- p: H! C/ O  h) _2 ?6 Z7 |
9 f( p+ b2 m9 ]* L& ^1 _& k+ t5 修改telnet.c  里的 AF_INET  替换 AF_AT
, t: I' T: O- g4 [$ o8 |. z/ A0 }#define AF_INET_temp AF_AT  (这句是我加的 )
( {/ Z! \: H* Z+ c! Vstatic void telnet_thread(void* parameter)
7 y$ e6 w  [- K3 ]( z$ Q{+ Y9 O3 L5 w& X7 x3 z: Q
#define RECV_BUF_LEN 64
6 d( b" e1 G5 i9 O5 ^9 M
& y$ L5 C0 p5 B1 B: {3 ~' {    struct sockaddr_in addr;- l( i- }( ?3 P  E: E2 i) G
    socklen_t addr_size;
6 }: U+ V( C' |( B4 v' \$ t    rt_uint8_t recv_buf[RECV_BUF_LEN];5 Q) H3 M: Z+ ~9 @: n  u7 S
    rt_int32_t recv_len = 0;
- P' I7 n5 \" O) \* {3 v4 W7 B8 i& {- e; {/ u( O4 `
    if ((telnet->server_fd = socket(AF_INET_temp, SOCK_STREAM, 0)) == -1)6 o8 T  R! X1 I& o4 y% g5 {
    {
  H) a$ U1 `! C$ k# |: n+ a        rt_kprintf("telnet: create socket failed\n");
" J+ u* I% n' c( ^+ p        return;) ]4 J0 A9 k5 x' F" b
    }
* f+ N; K' Y2 b8 W" Z* @1 f
6 E8 R0 h" \9 l    addr.sin_family = AF_INET_temp;
! m2 ?( A1 ?- H) @" m/ Q7 t+ _( Y3 S    addr.sin_port = htons(TELNET_PORT);
( Q, y1 ^6 u5 L# M    addr.sin_addr.s_addr = INADDR_ANY;
0 J8 {* |# c1 ^; c" U4 P    rt_memset(&(addr.sin_zero), 0, sizeof(addr.sin_zero));# Y0 z4 o8 ~' T0 L3 E' A/ m
    if (bind(telnet->server_fd, (struct sockaddr *) &addr, sizeof(struct sockaddr)) == -1)+ t, ^" k5 N' ?' E; `. Y
    {0 E. H3 I% f+ K" N9 M* |
        rt_kprintf("telnet: bind socket failed\n");
# P3 _4 C1 j. ^" O) ~6 ]        return;
. C( p, F. `2 W3 Q5 V4 q    }8 ^1 W+ `" a  c
% t7 g+ K" b3 x: o# k
3 E. R0 d. [) A
6 ,测试后 出现问题" H- \( B* D4 W& P9 h! q% D0 X3 d
0 n. j0 a8 M. p% X6 Q( \- O
发现 AT+CIPCLOSE 失败" e$ u/ k+ U6 t- w# D
# e) Y6 y5 K2 k1 C3 h  b
CLI 模式下直接发AT 命令1 V1 B+ N! y7 q7 Y3 ?2 _  r
AT+CIPSTATUS
# i* x% Q. x2 D2 E! F- ?; v) BSTATUS:4  , @$ Q7 L) m* Z
) C' n- O  q( e# N
OK2 x: t  K! [& J" O% ?
) W! ^9 g5 M9 K* X; @1 P; n
4代表失去 连接6 }1 B9 i* I6 ~# V1 s, J
发现以问题 , telnet 流程下先关闭 TCP  但是
6 I0 r+ c( t; G1 H6 u# T) L, j! h# z5 f& ]8 S. f$ L1 g: X0 m8 |
AT+CIPCLOSE=0  e* V9 ~4 l% D. }
UNLINK
3 T5 z- d! ]% [  E2 y3 N, g% M7 w% }  f( E7 Y4 Y
ERROR3 n" w4 w  i# M" ]

: x4 ?, y; L9 o8 F$ S  U6 V( t, P. |& x1 a& h* Z
这里有个ERROR 导致 at_client 文件下的函数 at_obj_exec_cmd* L7 L& ~2 F  z1 z
        if (client->resp_status != AT_RESP_OK)' ?' V8 |' x3 D
        {
" h  o6 [/ v1 ~6 o            cmd = at_get_last_cmd(&cmd_size);+ k& V" U3 q. v
            LOG_E("execute command (%.*s) failed!", cmd_size, cmd);
' K8 H% w# i% O# ~; _            result = -RT_ERROR;, F. P/ R3 N& h& p+ e
            goto __exit;( l, q' l; N# P" R5 U% W9 r! ]
        }
. _) m$ z. g$ z/ r# x    }; i/ {" c( W) o4 }. z
+ F, O$ i; Q- B7 }
0 ~2 f  M0 M7 H/ x% _0 Y
然后报了错误 导致  bind 失败
; b! _" I* q- ]$ R! t4 C    if (bind(telnet->server_fd, (struct sockaddr *) &addr, sizeof(struct sockaddr)) == -1)1 u2 T& j9 D. H! e
    {& l5 A# Z# p/ b5 Y" k
        rt_kprintf("telnet: bind socket failed\n");
& G6 ?8 ?  Z9 j+ S$ U" E        return;$ p4 C: _+ Y# E" Q
    }
7 @) Z* \+ H6 a( c1 P
5 F+ Y' b) Z' Z5 F  \& j- `* \& x- j" u
请问:
+ o$ A/ l; M8 utelnet.c 里的bind 干啥了,为啥回去关TCP?
, S5 l9 F( K# w: g8 x6 I' N ESP8266  下telnet  怎么实现 有例子 吗?  
5 {# V' k7 [# Q4 C" z! `官网的代码怎么实现telnet呢?" P$ p$ P% x$ S; ]0 e# p

3 ^! w1 n. \. H; C) Z
" g& N" A! o: C# ~/ J* M# N: Y
* j8 m1 i  f- q/ X/ N3 r/ r- _9 t$ Q: F

# r/ Q8 E. n' R& x
6 a+ p1 A! P. u1 K, E" w  t
4eb88e275a1c2564a8e257daa7e0964.png
1565012331(1).jpg
1565012079(1).jpg
1565011960(1).jpg
1565011750(1).jpg
使用道具 举报 显示全部楼层 回复
最新评论 | 正序浏览
显示全部楼层 |楼层直达:
发表于 2019-8-6 09:44:27 | 显示全部楼层
AT Socket 只支持作为客户端吧,telnet 作为服务器应该不能使用
使用道具 举报 回复
发表于 2019-8-6 10:45:15 来自手机 | 显示全部楼层
你好 我的理解是 只要esp8266模块能开tcp服务端
) A# h7 j6 w4 H% t* n应该就能进行telnet了,不知道理解对不对
使用道具 举报 回复
发表于 2019-8-6 12:56:36 | 显示全部楼层
esp8266 模块本身是支持服务器端的,AT Socket 组件还没有支持这个功能特性,如果需要支持 esp8266 模块的服务器端功能,当前只有修改 AT Socket 组件的。
使用道具 举报 回复
发表于 2019-11-14 15:58:41 | 显示全部楼层
楼主,解决这个问题了没?,我也碰到了
使用道具 举报 回复
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|RT-Thread开发者社区 ( 沪ICP备13014002号-1

有害信息举报电话:021-31165890 手机:18930558079

© 2006-2019 上海睿赛德电子科技有限公司

Powered by RT-Thread

快速回复 返回顶部 返回列表