EC20 API接口问题请教

2019-11-11 15:09 [复制链接] 22 263

[I/sal.skt] Socket Abstraction Layer initialize success.
* q5 a6 [! f: i, K. z" I[I/at.clnt] AT client(V1.2.0) on device uart3 initialize success.# k" l0 S! W3 L& I( T2 N1 ]" }
[D/at.ec20] Start initializing the EC20 module
9 U! }# `# {1 X% q2 ymsh />[D/at.ec20] Baudrate 115200
1 t; G) S! v1 q) \/ [[D/at.ec20]
& ]1 V+ O5 A8 }$ A% f[D/at.ec20] Quectel
. F0 n6 ?3 |& Y[D/at.ec20] EC20F
; E5 H3 W; P8 o( I[D/at.ec20] Revision: EC20CEFAGR06A10M4G
7 p; `0 e! U$ M* ?; ?[D/at.ec20]0 Z" \2 A- V, e8 I7 I1 n% B
[D/at.ec20] Signal strength: 30  Channel bit error rate: 99' l. m0 i& m4 o' j) ?: H; t
[D/at.ec20] GSM network is registered (0,1)
- B5 v6 X5 W* u. i9 P, o0 C" r1 k[D/at.ec20] GPRS network is registered (0,1)
6 |: b( J/ }5 ^* y$ [! u6 f9 U[I/at.ec20] CHINA MOBILE' W! e7 A( v$ Z0 v
[I/at.ec20] 10.183.61.4- \( [0 H+ v6 V2 W/ [4 q
[D/at.ec20] EC20 IEMI number: 867394043406528
: q; b4 C! R$ I& ~2 T# \7 M[D/at.ec20] EC20 IP address: 10.183.61.4
' Y: f" @# ^. `+ k  D5 M+ V7 L[D/at.ec20] EC20 primary DNS server address: 211.136.17.1072 c6 u" ]% d: S4 y  Y+ r
[D/at.ec20] EC20 secondary DNS server address: 211.136.20.2034 v( q! K1 `# _& M
[I/at.ec20] AT network initialize success!
6 t, _3 f1 ]2 i- |  k' _
/ P8 H" Y3 [( H1 u3 G8 A5 l* W如上所示,使用RTT加AT组件已经配对成功,通信OK,但是有个尴尬的问题是不知道怎么发送数据到相应的服务器端口,API 没有找到。不知道是哪个。查看AT组件API也没有举例说明。有点懵逼,我现在就想问一下,发送到远端的服务器应该调用哪个,接收函数应该调用哪个?8 O! C: Q) M/ D6 u

( @* V. R, u9 |, B8 F1 i3 T# C: C7 K
- m* S7 ]* p3 X* j+ m: S
使用道具 举报 显示全部楼层 回复
最新评论 | 正序浏览
显示全部楼层 |楼层直达:
发表于 2019-11-11 15:11:00 | 显示全部楼层
AT版本使用的是V1.6
使用道具 举报 回复
发表于 2019-11-11 16:00:20 | 显示全部楼层
老大们,不会又是用的linux那一套东西吧。直接调用socket()函数就行。高速我,让我死心
使用道具 举报 回复
发表于 2019-11-11 17:02:56 | 显示全部楼层
不太明白楼主的意思
$ P. u; a+ }- u' q( T. p9 r9 z+ F' a- ~3 R. i% d8 o( `7 i. a, F( @4 F0 q7 x
socket接口不好吗?
7 f' s' n: @% g' H' `) p
. O$ h- K2 @. j" n) R对了,socket并不是linux的哈,全名是 BSD Socket
使用道具 举报 回复
发表于 2019-11-11 17:11:52 | 显示全部楼层
aozima 发表于 2019-11-11 17:02. z9 ~: x8 t7 W4 b# a6 [) t  P, w
不太明白楼主的意思& h1 H/ K+ n2 x( q8 Q" Q2 g) J, i% c
3 N  M5 B- }9 H0 Y
socket接口不好吗?

# c2 Z2 K3 p$ U$ e; U- w4 {我知道啊。只是单片机上用scoket函数有点怪怪的。' v/ v  n; Y$ v: L5 O# x
我上面想表达的意思是:嗯~直接上代码吧,我在程序里面加入了AT组件,版本是1.6的,下端接入的是4G通信模块,使用串口。- {+ _' R% ]0 |3 Y# T  H2 n* [3 d
我在main函数里面加入了如下内容。
" j9 S, c  I/ b2 K! Y  `$ h- g4 d
) Y/ z6 \% I& C4 W5 Sint sock = socket(AF_AT, SOCK_STREAM, 0);- q9 b. y  g" h. d2 ~# m% v# Q
    struct sockaddr_in serv_addr;, }& j7 |" x, z* {, i# C& e$ Z
    rt_memset(&serv_addr, 0, sizeof(serv_addr));
- a2 G- L+ X" M$ F& j4 P$ M/ l    serv_addr.sin_family = AF_INET;
+ {/ ~0 F! B4 Z) P2 l. u    serv_addr.sin_addr.s_addr = inet_addr("127.0.0.1");5 h9 }( {' C# p) ^* c
    serv_addr.sin_port = htons(1234);
; H7 @5 l% i& p: S- s0 ~6 j, ?    connect(sock, (struct sockaddr*)&serv_addr, sizeof(serv_addr));  O2 K7 s( f+ k% t0 Z, M- @
    char str[] = "Hello World!";
9 F# v6 w. J- ~1 r( I( U! O    write(sock, str, sizeof(str));
- ?, ^$ [, R9 H$ l% C/ Z   close(sock);
! P1 k9 }+ B2 C- ^1 x" @$ e! H' a* K/ C0 ^. K' `
既然官方文档支持socket,不知这样操作可以不,我现在没有远程服务器,只能猜测,所以想问一下
使用道具 举报 回复
发表于 2019-12-9 14:38:29 | 显示全部楼层
你好,搞定了吗?我也是同样问题?
使用道具 举报 回复
发表于 2019-12-9 17:12:26 | 显示全部楼层
悬赏回复
使用道具 举报 回复
发表于 2019-12-11 17:41:31 | 显示全部楼层
ramboxin 发表于 2019-12-9 14:38" o7 B" |( {# u* v' F
你好,搞定了吗?我也是同样问题?

3 e: @; B0 b+ L3 p, C使用linux的那套socket机制
使用道具 举报 回复
发表于 2019-12-11 17:42:59 | 显示全部楼层
ramboxin 发表于 2019-12-9 17:12
+ c) P& _  L3 s& N0 U悬赏回复
  1. /*
    * k* R; }- \$ U# z& `7 f
  2. * Copyright (c) 2006-2019, RT-Thread Development Team+ n6 Z, w+ u5 |& o# j  Y
  3. *
    , k  c: j) h& g; j9 b- N  D; H
  4. * SPDX-License-Identifier: Apache-2.0; C" D1 O! L3 Y7 _8 k( B$ d
  5. *. D6 Q  v- R& X( [8 C5 o9 }# _
  6. * Change Logs:8 O+ v8 G, c' f4 F; S
  7. * Date           Author            Notes
    0 B4 K$ |5 `4 n$ M8 H! `
  8. * 2019-07-09     MurphyZhao        first version
    ( f8 _6 }4 G4 X. U2 \' t. j
  9. */
    ( T( J. W- K" q( G/ u: l2 H

  10.   V" o' A( [% k9 r
  11. #include <stdio.h>) D4 k% |% i$ E" [
  12. #include <string.h>
    ( p( ]7 J; ]6 N4 [
  13. #include <stdint.h>$ q) ^$ }/ a( c  V& C2 G7 O0 `
  14. #include <stdlib.h># |: L/ E- d! `% W
  15. ! k4 o* v! n- c/ e* y0 e+ v
  16. #include <rtthread.h>
    2 t6 e: m3 v9 p& G) V; n
  17. / ^, i' m! g' x- z
  18. #ifdef NB_TCP_DEMO
    3 M6 o. ?' j$ y, x1 N& }
  19. #ifdef RT_USING_SAL7 ~* k' e  m# d. {

  20. 0 n) L+ P7 y2 Z  ?! ?  n$ j
  21. #include <sys/socket.h>
    ' E' e* M/ [& E% U
  22. #include <netdb.h>
    ) I5 ]4 t0 m+ u1 E
  23. #include "sal_tls.h"$ K. {1 _+ d4 Z7 d7 v
  24. #include "sys/time.h"
    / _- o: ?1 |  E' b% S( V; R
  25. #else8 s7 w6 E* f0 g8 K7 U' o% l# g* {7 F

  26. . S! X6 c" g' o( O: i. U
  27. #include "lwip/sockets.h"
    : Y8 O  ?9 w0 T0 X6 d$ \$ F/ Q
  28. #include "lwip/netdb.h") J* a0 b1 V( r% ]1 S
  29. #include "lwip/sys.h"
    1 w( F8 b0 Z8 T1 j4 B3 Y8 S7 y; {) Q
  30. #include "lwip/inet.h"- Z. o1 q* p2 w$ L# W

  31. 7 w* `1 c2 A4 j( A4 ]
  32. #endif /* RT_USING_SAL */# J# z9 C1 k/ Y7 }: G

  33. - x4 U$ A/ y# i7 T; D  Y
  34. #define LOG_TAG              "demo.tcp"( v$ T, |: s) C( G
  35. #define LOG_LVL              LOG_LVL_DBG( S  ]* `2 f8 g7 i
  36. #include <ulog.h>. b; I/ |% e! g% r; w& |5 ^
  37. $ ]; A$ V2 j2 e% n6 w0 P, u
  38. #define TCP_TEST_HOST    "www.rt-thread.com"
    8 x2 N  Y. t( x& z
  39. #define TCP_TEST_PORT    (80u)& W6 e  R8 a/ j

  40. 0 C6 u5 n  z; Z9 v8 ?
  41. #define TEST_BUFSZ       (1024u)/ u  s3 i" d, D
  42. - a6 I* x& l1 R  E
  43. static const char *req_data = "GET /service/rt-thread.txt HTTP/1.1\r\n"5 _  y, f" E, s: p! L. v$ U
  44.     "Host: www.rt-thread.com\r\n"
    + n% o* K) Q6 n) c, Z# g0 ?
  45.     "User-Agent: rtthread/4.0.1 rtt\r\n\r\n";5 {$ u/ n- d: _( T9 M
  46. - k; A7 J) {* {) U- `) L; i
  47. static char req_uri[128];4 A* u% G0 |% N3 G
  48. static int  req_port;
    ' G3 g3 `( Z* F1 N6 k& j

  49. 5 o; f( m: `' L: E2 s" N- p4 r2 T9 E
  50. static void nb_tcp_demo(int argc, char** argv)
    , o, m0 f9 d" n/ j2 {% ^
  51. {
    4 y$ G8 `' ^. Y0 N
  52.     int ret;/ L" `- b$ o9 c1 k) I, ]

  53.   A! f. [! m' V1 p" H% D1 m
  54.     int sock = -1;
    ) w$ ?  D  |: q9 ~& ~! P+ b
  55.     struct hostent *host;5 Y" Y  ]; i% ]7 W, g
  56.     struct sockaddr_in server_addr;1 S( N+ [$ c5 G" Q' a0 ?
  57.     int bytes_received;9 Z! t( ^4 {2 `1 b6 J
  58.     char *recv_data;
    7 @3 X; W$ B: N1 n# B4 _0 A1 F) M8 g

  59. ! N7 s5 O+ v: H0 J  I( k
  60.     char ip_addr_buf[64];1 u( j- R/ ^9 Q: E: B9 a& }

  61. . z+ C, L5 K7 m6 u+ P* ^# s
  62.     if ((argc != 1) && (argc != 3))" I8 ?) H( p# P) ^0 P% b3 U
  63.     {: ?: u; N2 f' C; z* r6 w
  64.         LOG_E("In param error");# a0 ]5 g5 M3 m
  65.         LOG_I("cmd: demo_tcp [<host> <port>]");0 _' O9 [& t& |2 G3 ]
  66.         LOG_I("eg:  demo_tcp");" M1 J! I1 }3 `/ Q7 Z( B+ }# F
  67.         LOG_I("     demo_tcp 127.0.0.1 8080");$ j' r/ L, b6 g! m8 t
  68.         return;7 O* @7 P( k# A
  69.     }) n- Q$ ^# K( @8 J( S3 B6 |
  70. ! }) h9 L& |4 _. s! {3 s* u
  71.     rt_memset(req_uri, 0x0, sizeof(req_uri));
    - X+ s# b4 M9 K$ e7 c" U
  72. 6 c: {) m5 Q9 X5 Y" u7 E
  73.     if (argc == 3)0 T. d) ]* Y1 a9 `
  74.     {' ~) d' E- z! `( B+ h) c( o: w
  75.         rt_strncpy(req_uri, argv[1], rt_strlen(argv[1]));
    # F" u2 w/ F7 Y: X: B$ q) b
  76.         req_port = atoi(argv[2]);) }  B/ `5 Y) D2 K. ]. k
  77.     }4 f# z' K$ ^: x- N9 S. V
  78.     else  ?  n$ s  \$ b! i$ [0 G$ U
  79.     {4 u& ^! J, G2 V1 e5 B$ l
  80.         rt_strncpy(req_uri, TCP_TEST_HOST, rt_strlen(TCP_TEST_HOST));
    ) C4 V5 F2 B- A2 b
  81.         req_port = TCP_TEST_PORT;, g; l" V0 D+ V4 G0 t
  82.     }
    * E* v0 U, q& D7 i! ?
  83. 6 z) n# B" H8 f+ j$ M# R
  84.     LOG_I("TCP demo start");$ q, V& y% H0 T& N
  85. : F  `+ [8 f1 I' B
  86.     LOG_I("Host:%s; Port:%d", req_uri, req_port);  N( V# D& Y  h+ \  f2 Y: E+ P

  87. + k/ r. W7 n$ I0 z3 t6 _
  88.     LOG_D("will gethostbyname...");9 U1 C. ~# Q9 q9 O% y: S
  89.     host = gethostbyname(req_uri);! `; k: W  H7 _& S. c
  90.     if (!host)
    / \. V7 M1 z8 X# O" ?) x5 Y9 j
  91.     {
    * d( |# k$ [  @+ {! _# \
  92.         LOG_E("gethostbyname failed!");
    ( x  N  r1 o- L
  93.         return;
    / t! u, {& s  E
  94.     }& ~( W. d- ?& X4 Z1 H

  95. . P; m, Y5 Q1 ?; y  {2 j
  96.     LOG_I("gethostbyname pass. ip addr: %s", inet_ntoa_r(*((struct in_addr *)host->h_addr_list[0]), ip_addr_buf, sizeof(ip_addr_buf)));
    - ^; s1 |; }; Z$ o) v

  97. , ~' L; c0 k1 q% \" X/ h9 w
  98.     recv_data = rt_calloc(1, TEST_BUFSZ);! |. Z  g& [+ f7 |# j  x( h
  99.     if (recv_data == RT_NULL)$ X; E7 @; `: h* Z, M
  100.     {& j0 j& W" a* f2 J; D
  101.         LOG_E("calloc failed. No memory!");6 Y, D! h: `: h! T: w
  102.         return;# ?* y# P: Z, A& H  c' A
  103.     }# V) q. J2 h! M& ?+ E" C
  104. ! Y" ^' p! ]7 L. _2 A& E0 c
  105.     if ((sock = socket(AF_INET, SOCK_STREAM, 0)) < 0)
      o) M: ?6 V6 q- Y/ D0 P
  106.     {
    7 I. @/ N$ V- c' P  S( o
  107.         LOG_E("Create socket failed!");
    2 B% d% y& p' e) p, O" N- D
  108.         goto __exit;
    ) v7 A& R0 W" j# k4 o1 ?
  109.     }+ w! L+ }8 Z) s. h, e

  110. 8 d/ H7 i5 P; }$ K2 o- i
  111.     server_addr.sin_family = AF_INET;. A% o) x. ~7 H& ~
  112.     server_addr.sin_port = htons(req_port);9 a5 X6 s- B7 v: U2 I/ @
  113.     server_addr.sin_addr = *((struct in_addr *)host->h_addr);5 b- o- K' B1 q- D( x
  114.     rt_memset(&(server_addr.sin_zero), 0, sizeof(server_addr.sin_zero));8 N3 e4 a2 N) X. T
  115. ( N9 U! V6 {- ?+ a& r
  116.     if ((ret = connect(sock, (struct sockaddr *)&server_addr, sizeof(struct sockaddr))) < 0)
    0 I2 a& ?  G. G+ ?) P: a. {& Q
  117.     {
    . C/ S( d# X1 h, O. `# \, |3 n
  118.         LOG_E("Connect <%d> fail! ret:%d", sock, ret);; z0 g" w0 Y' b* n5 q8 a" j
  119.         goto __exit;
    ( ^( [. T+ h' v1 k- u/ G8 Q) Z2 j
  120.     }
    ) ?% {3 G9 B  R
  121.     LOG_I("connect <%s> success", ip_addr_buf);3 d: b' \3 m; D
  122. % e. w7 L7 N: o' e# E
  123.     ret = send(sock, req_data, strlen(req_data), 0);5 s# ^3 k* _% ?5 [1 e3 ~8 q
  124.     if (ret <= 0)
    2 U) x) g1 c: o+ _
  125.     {
    & c% K0 b: q8 {8 m% U6 y& p& i
  126.         LOG_E("send error, will close the socket <%d>.", sock);2 s- I6 @3 x6 `) F! e$ o6 Y
  127.         goto __exit;8 S% {+ K* k' o5 B- ]; b$ p
  128.     }3 F3 T. q+ c' r5 C% {) b  p
  129.     LOG_I("send success");
    : F) I/ J! j: `/ j

  130. " L# z% k( t. F2 N2 C" J0 W/ J0 `. j
  131.     bytes_received = recv(sock, recv_data, TEST_BUFSZ  - 1, 0);! K/ s8 `% @* t; Y; I
  132.     if (bytes_received <= 0)
    9 s0 S5 @# M2 i7 R2 D: v5 M
  133.     {$ e' j) j8 x) r# s1 z4 f+ R6 \" T" D8 c
  134.         LOG_E("receive error, will close the socket <%d>.", sock);2 W6 ]1 d, {" u& l* {) P
  135.         goto __exit;
    & b  v! H. u2 [1 u4 q$ X
  136.     }
    5 o" ^6 Y! a  @) k8 j
  137. ) d/ l  R! X9 R! }" T. r" R
  138.     LOG_I("received data:\n");
    " N' |: v$ W3 H
  139.     for (int i = 0; i < bytes_received; i++)3 u6 i+ x* C% m' p' j; _
  140.     {
    . P) ~/ j4 u  O" O# P
  141.         rt_kprintf("%c", recv_data[i]);9 m# m3 x+ ^' g" ~; ?8 t' a
  142.     }
    7 W2 _/ D1 K/ Z# D+ B
  143.     rt_kprintf("\r\n");
    3 u+ c3 C5 G( I8 d$ U

  144. " @$ i5 T, P! K8 X9 G
  145. __exit:
    4 V8 Q3 ?  x. I/ S8 {" l
  146.     if (recv_data)
    / g& l# V' f% _: @3 V& ?* |- Y& U7 x6 x
  147.         rt_free(recv_data);, j% {2 J6 R4 s" b# ?3 i/ B
  148. 8 u1 `2 _9 t$ v7 N# l/ N( c
  149.     if (sock >= 0)
    & {( _. t! w4 u
  150.     {
    $ L$ Z. q: h: a: ?" I( h
  151.         closesocket(sock);  q! ^2 v5 i- r" V3 a
  152.         sock = -1;
    7 o* t9 W% Y5 ]" `
  153.     }
    - @' a  l4 X" @4 I; \
  154. ) K9 t; r5 ~5 Q! @* y
  155.     LOG_I("TCP demo end");
    ' M3 B2 G* |, s7 [/ w
  156. }* q/ i3 B& Q, p( a
  157. #ifdef FINSH_USING_MSH
    " {  r( c7 L0 D* n1 }. y
  158. #include <finsh.h>
    ! y3 s; y. T: z, D1 V% g
  159. MSH_CMD_EXPORT_ALIAS(nb_tcp_demo, demo_tcp, nbiot tcp test);) k+ v" y3 a$ }' i0 h/ I8 k
  160. #endif /* FINSH_USING_MSH */) w6 o  c% o) v5 Q" e6 F

  161. 6 [* R" @, c% n6 r% R+ m
  162. #endif /* NB_TCP_DEMO */. j$ u" s( F" P, U
  163. 8 M+ h) a' s8 |& I$ o; ~' |- p3 w
复制代码
使用道具 举报 回复
发表于 2019-12-11 17:43:40 | 显示全部楼层
  1. /*
    9 e* v) K4 u! |6 b+ d" w
  2. * Copyright (c) 2006-2019, RT-Thread Development Team
    9 e, F3 }/ s. ~  p+ @, }
  3. *
    8 L5 i  ~; M1 B5 f8 u+ Q* s. a
  4. * SPDX-License-Identifier: Apache-2.0; a8 h1 _; z- `2 \$ |
  5. *
    + B$ c1 D3 w3 `; m$ Q  _9 \
  6. * Change Logs:! ?4 i2 u1 k1 p
  7. * Date           Author            Notes
    8 E% E$ ?8 O0 ]8 u, h% O* E5 W$ d
  8. * 2019-07-09     MurphyZhao        first version  a$ h4 A& l4 l, L; Q/ p* z
  9. */
    * [0 y: y& [1 c1 O5 {: o+ p: `

  10. % W- A8 B7 E# I; G- E& z
  11. #include <stdio.h>
    7 S( N0 E# U6 `3 _4 m
  12. #include <string.h>
    4 d3 l9 ?5 z& G$ V1 l9 ]$ [) x
  13. #include <stdint.h>
    " P  m& s: `9 Y- |
  14. #include <stdlib.h>; D: J9 M* q. n0 L  n
  15. 7 j$ V- p$ ~1 R0 ~
  16. #include <rtthread.h>" i( e+ j/ j. Z+ Y5 A6 w. G( g. O
  17. - J5 W) e! V6 @3 }  u
  18. #ifdef NB_UDP_DEMO9 W# a" w* m4 J; Z5 s; `1 u

  19. % P' v0 @2 g2 p0 \, S  _; U& C4 F
  20. #ifdef RT_USING_SAL
    0 c" ?- `$ y  G4 U; F
  21. % }6 E1 `) i; m% S
  22. #include <sys/socket.h> " Y/ W6 w7 _2 ]$ A$ z& g8 M6 G
  23. #include <netdb.h>
    . n4 A/ P( ?+ ^, T+ I
  24. #include "sal_tls.h"
    3 H+ ^. [0 \, _
  25. #include "sys/time.h"* P& W4 ]8 r. S' ^5 j
  26. #else  y- W; m# p/ Z# r- S: L& X. j

  27. : y. t) A4 l: x9 I
  28. #include "lwip/sockets.h"
    . N: H8 |2 v& F7 n7 Y, E
  29. #include "lwip/netdb.h"& T0 \0 w9 o- X* l7 u% |' O$ |! B
  30. #include "lwip/sys.h". T; K# x. @3 Z7 @
  31. #include "lwip/inet.h"* b* |7 |* h7 N1 A3 T& \
  32. + J/ D, M- q8 \1 e4 j& q7 Z: C
  33. #endif /* RT_USING_SAL */, `) E; w/ ~, \& z$ {
  34. 1 H, d' `' |7 y
  35. #define LOG_TAG              "demo.udp"
    / W9 ~6 m+ {  o+ K
  36. #define LOG_LVL              LOG_LVL_DBG
    6 L  P- _$ l3 n8 n& Q
  37. #include <ulog.h>$ e- p3 Q4 h3 o; x4 K) j
  38. 8 u! V, l. U0 Y$ d3 p
  39. #define TCP_TEST_HOST    "114.116.144.151"
    , D" L! y' }/ y+ v/ Y
  40. #define TCP_TEST_PORT    (2010u)
    ; l+ k  ?; I7 d( ]& B

  41. 6 r! b9 x! n, M9 Q0 K- w/ P
  42. #define TEST_BUFSZ       (1024u)+ S0 d- g0 M8 w

  43. 4 J# a5 P) y* j
  44. static const char *req_data = "This message is from NB-IOT UDP Client with RT-Thread.\n";
    2 b! K, Y1 l4 b
  45. static char req_uri[128];" K3 ]8 U6 Y# W4 }; h) u
  46. static int  req_port;
    ' P8 Y8 M" O1 V/ X& ^

  47. . l1 ~0 D) U" b  t0 n
  48. static void nb_udp_demo(int argc, char** argv)
    * e3 b! G& Z: M; D
  49. {5 r; \' q# f" f  |- [
  50.     int ret;4 n) e/ ?4 j8 d, p' v/ l; z) @7 e( M
  51. / r% y- h! b! y  M% \+ ]  k
  52.     int sock = -1;1 y, i6 n+ R3 n( }/ s- K; L1 ~
  53.     struct hostent *host;
    6 x4 |( }8 f+ g2 q  E
  54.     struct sockaddr_in server_addr;3 Y$ f2 V, e$ M
  55.     char *recv_data;& C% I1 N" j, {  V3 p: ]0 L) H
  56.     int bytes_received;
    5 a/ [: d" c) M& @

  57.   Y9 L+ `% a- j/ e* F' L
  58.     char ip_addr_buf[64];
    0 p' i- N- S/ t6 o2 Q6 T: t
  59. ' ^3 T9 C1 ]! z( p  b: s. Y* n
  60.     LOG_I("UDP demo start");
    % {- K2 @/ F. y2 h
  61. 9 [) A: \; {6 e) ?9 m
  62.     if ((argc != 1) && (argc != 3))6 }$ W1 d- f. f
  63.     {
    & z5 t* x8 p, O8 B- V- k$ U4 ]5 |
  64.         LOG_E("In param error");
    ) D: R. q- p/ M* K( g. Y2 x7 V* Y; ~5 {
  65.         LOG_I("cmd: demo_udp [<host> <port>]");9 p7 ^7 e0 B9 @/ B" V5 W  v; y; Z
  66.         LOG_I("eg:  demo_udp");# x* L3 p# O  |
  67.         LOG_I("     demo_udp 127.0.0.1 8080");
    5 \3 }1 @. w2 h  x
  68.         return;
    ; }& r% t! ?+ ^  {) Z1 z* O1 M& @
  69.     }: D; y  @- x" B2 Z9 L" R
  70. 2 c) v# q9 ?9 [8 R, H% y
  71.     rt_memset(req_uri, 0x0, sizeof(req_uri));
    2 a" ^. ?8 J" O( s- h/ T4 Q. ^# {$ o

  72. 3 b$ E' O9 X) Z' v) D% \  E
  73.     if (argc == 3)
    # n, m0 S' ^6 ~( z, E: t
  74.     {
    . A& b5 J. B5 m/ p6 K
  75.         rt_strncpy(req_uri, argv[1], rt_strlen(argv[1]));
    . z1 g& R. a# O% @; {
  76.         req_port = atoi(argv[2]);
    2 P$ h1 x: @: J; e
  77.     }
    ' A6 ]  {" B% ?" s# w
  78.     else
    6 N9 m. f: m) ^
  79.     {2 g) r- g' ]: ~) Q8 @* i* h
  80.         rt_strncpy(req_uri, TCP_TEST_HOST, rt_strlen(TCP_TEST_HOST));
    * v! W% V) v  c, {) o* g
  81.         req_port = TCP_TEST_PORT;2 C/ q8 v  e+ S9 ^  }! w" A& v
  82.     }& [0 R2 X- J- j; ~( ]
  83. 4 C) n9 u; l4 r9 W( v
  84.     LOG_I("Host:%s; Port:%d", req_uri, req_port);
    ' @5 _& S5 `1 A3 Y% J

  85. . ~  b5 T: G( o  w7 p% G
  86.     LOG_D("will gethostbyname...");
    ! u3 f0 E+ a% |( Z! n
  87.     host = gethostbyname(req_uri);
    3 X4 d+ s, Z! ^+ F% K: Z$ Z5 X* D
  88.     if (!host)
    ( k3 Y3 d' t' Y& a5 I
  89.     {
    4 ]* C: t6 {3 }! j1 b- c- M
  90.         LOG_E("gethostbyname failed!");
    + j6 O+ Y( ~$ Q6 J! J+ e. O. |
  91.         return;9 Z' ?3 D7 n4 w1 P
  92.     }
    % ?% G  k1 h1 A8 U! p+ G) x
  93. / J7 g6 p' W1 _+ ]/ {; r  f5 s
  94.     LOG_I("gethostbyname pass. ip addr: %s", inet_ntoa_r(*((struct in_addr *)host->h_addr_list[0]), ip_addr_buf, sizeof(ip_addr_buf)));4 ?( v, Q1 B% O- o

  95. 8 f! S5 g$ ~* L, c9 T1 E
  96.     recv_data = rt_calloc(1, TEST_BUFSZ);* e# B7 J5 T  \1 c6 k
  97.     if (recv_data == RT_NULL)
    7 F- C# h# q# v$ {) Z$ t
  98.     {; ]3 L, f  S, U2 p3 J7 j
  99.         LOG_E("calloc failed. No memory!");6 R' V! p% N$ l3 i+ a, l: X" @
  100.         return;
    0 R8 a; h% C# i. U. x0 }7 x* s0 M
  101.     }; l9 y* }( C8 B' h1 [3 ]
  102. 7 v: L2 T  a# D$ r) G
  103.     if ((sock = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)) < 0). v% V. f8 K( {; h3 s# a
  104.     {; [2 a0 }9 B% Z( b! i/ K
  105.         LOG_E("Create socket failed!");% G3 n( R. n0 u! x
  106.         goto __exit;
    / W$ R" m7 L* F" Z
  107.     }
    7 L$ O% N, r" w

  108. ; m- i* }' ?1 b3 {3 }% B9 O# X
  109.     server_addr.sin_family = AF_INET;0 |( p3 j# D' z: R0 ~
  110.     server_addr.sin_port = htons(req_port);
    6 ~8 }$ `5 A0 V# R" |0 J* D! `
  111.     server_addr.sin_addr = *((struct in_addr *)host->h_addr);5 C  H! f3 \8 {
  112.     rt_memset(&(server_addr.sin_zero), 0, sizeof(server_addr.sin_zero));
    3 ^0 _2 \+ g1 ]3 S, l" j' h7 T: B
  113. # a  E- W- F; ]  l" ^# j% O) R# q
  114.     if ((ret = connect(sock, (struct sockaddr *)&server_addr, sizeof(struct sockaddr))) < 0)
    ) G3 J6 J8 Z$ F: j
  115.     {# W  O$ S8 r+ d8 v/ R/ z3 d" S/ ]3 P
  116.         LOG_E("Connect <%d> fail! ret:%d", sock, ret);" ~; f) t) M/ Q+ _% O
  117.         goto __exit;% K9 o0 ?+ {# t2 ~
  118.     }
    . p% X6 [$ a% E$ A2 g, L
  119.     LOG_I("connect <%s> success", ip_addr_buf);1 B3 N6 b0 U: M7 t6 Z5 g

  120. $ z% w& R$ m9 r1 a& r( e( T
  121.     ret = send(sock, req_data, strlen(req_data), 0);, v% T7 U) f; {6 K' L7 x
  122.     if (ret <= 0)
    " ~6 q4 ], E2 t# w1 w
  123.     {4 S- B  w4 F; d  i' t' X
  124.         LOG_E("send error, will close the socket <%d>.", sock);
    4 A$ p0 \! v. e1 b4 j4 z
  125.         goto __exit;
    % O+ A! }0 v# A" W! K3 J
  126.     }; X' W, e1 z. x; n
  127.     LOG_I("send success");3 m5 a+ C/ Y5 c% w
  128. 5 O: W0 j5 U: \* D9 r8 o  |+ ^$ t
  129.     bytes_received = recv(sock, recv_data, TEST_BUFSZ - 1, 0);
    # w. P# h2 e' [$ `
  130.     if (bytes_received <= 0)0 A0 W* O0 u- j  R" ?: u; T, {& g! y
  131.     {& B) s7 h4 K0 ]" O/ [- T
  132.         LOG_E("receive error, will close the socket <%d>.", sock);
    ' a9 n* U2 a$ I' M: Q# }. U
  133.         goto __exit;2 p, Q6 _6 p6 [
  134.     }
    % ~# [7 n* e8 p2 g
  135. 7 z* @  h3 B0 h1 s
  136.     LOG_I("received data:\n");
    ( I$ w9 B0 x/ a9 X/ t5 b
  137.     for (int i = 0; i < bytes_received; i++)
    # Z2 |0 ~9 s8 L2 i- F8 K" h
  138.     {6 p( a  v+ z7 T' W& T
  139.         rt_kprintf("%c", recv_data[i]);
    % S0 c2 Y& p+ {/ Z- P. p! I. ~
  140.     }/ w/ w! y' s+ d1 N. E
  141.     rt_kprintf("\r\n");" s6 P  C: X( [" D+ b; p8 W4 `$ S

  142. 8 e. `7 L' A; h5 n. y- E$ P
  143. __exit:
    - h" W* T9 D9 F" r
  144.     if (recv_data)) v  z% E1 W( K
  145.         rt_free(recv_data);+ r( H6 [/ G1 E! M% d$ l1 p3 p5 P
  146. 2 ^! I* t# @( ?+ w
  147.     if (sock >= 0)
    - p* q, @  e3 _' ^
  148.     {, C+ o7 t- t& o3 z
  149.         closesocket(sock);
    2 Q" d3 `- z2 G% ^3 Z: G# E
  150.         sock = -1;4 T* `: \4 f$ [, ]+ j
  151.     }1 q# M% L4 x* G4 H# a
  152. " H; S9 g1 v7 t/ s# G
  153.     LOG_I("UDP demo end");
    1 y% A. [6 K" q" E2 l! X
  154. }& P5 n' n* h+ O
  155. #ifdef FINSH_USING_MSH
    $ s0 h/ _8 h5 }4 u- I
  156. #include <finsh.h>$ J0 G  H; q2 v% |. T
  157. MSH_CMD_EXPORT_ALIAS(nb_udp_demo, demo_udp, nbiot udp test);( ^/ h$ }; [0 n* p% D
  158. #endif /* FINSH_USING_MSH */9 V( D7 p$ s6 ~, }( V
  159. 0 `. M5 F$ u$ g
  160. #endif /* NB_UDP_DEMO */6 d( P1 ?$ o4 e
复制代码
使用道具 举报 回复
发表于 2019-12-11 17:44:31 | 显示全部楼层
- i- }8 h) W# d0 C$ t; C# E
希望对你有帮助,这是rtt官方的人员编写的demo,你要感谢他
使用道具 举报 回复
发表于 2019-12-12 08:47:40 | 显示全部楼层
ROG 发表于 2019-12-11 17:44
( I0 K% J, Y4 L2 l2 u/ w希望对你有帮助,这是rtt官方的人员编写的demo,你要感谢他

7 l$ u, v/ z! |* d不用socket吗?
2 `& i# \# H6 L& Iint sock = socket(AF_AT, SOCK_STREAM, 0);% V- |' Y, e4 }7 T
    struct sockaddr_in serv_addr;
/ a* u1 m9 c  P* l, p  g. M    rt_memset(&serv_addr, 0, sizeof(serv_addr));7 ^  `& K2 c* B7 u" k0 x' g) S  L/ a
    serv_addr.sin_family = AF_INET;
8 O' ]: o- X* E- [9 {: F    serv_addr.sin_addr.s_addr = inet_addr("127.0.0.1");
- z7 G  n9 O. L9 `3 M0 c0 r    serv_addr.sin_port = htons(1234);  u% m2 y8 n' G0 ]. A2 {
    connect(sock, (struct sockaddr*)&serv_addr, sizeof(serv_addr));! c; I, o5 y; s9 h
    char str[] = "Hello World!";" s3 C9 v! c0 [3 k; t# Q9 ~3 G) \9 R
    write(sock, str, sizeof(str));* n. v9 y0 _7 A; X
   close(sock);
! ?; ?! M) S7 D5 O这个不能用吗?
使用道具 举报 回复
发表于 2019-12-12 16:44:42 | 显示全部楼层
这几天都被这个是搞晕了。一星期了毫无进展。不过发现sal_socket.c中连接的是, Z& \6 W; L9 ^0 I" W0 |( o7 j
//#define SAL_INTERNET_HOST      "link.rt-thread.org"5 _- X. H; d# Y" y; X! j
//#define SAL_INTERNET_PORT      8101* ]" |& [3 L$ X  V0 _
使用的是SOCK_DGRAM
8 S$ j" r6 t7 J' H# f4 T这样初始化的跟我要的不一样啊,我要的是TCP
0 c; M4 p: B! u5 F" m+ K所以改成了" h( L" U" n# O6 N9 J
#define SAL_INTERNET_HOST      "ramboxin.xiaomy.net"//我的# |6 Y. ^  j$ h# x
#define SAL_INTERNET_PORT      15500
7 s) J) [! y7 S  wSOCK_STREAM
+ p9 B* ~$ ^7 ]6 s- |7 j可是还是通讯不了,为什么?
使用道具 举报 回复
发表于 2019-12-12 17:30:18 | 显示全部楼层
或者能不能付费指导,谢谢
使用道具 举报 回复
发表于 2019-12-12 18:06:06 | 显示全部楼层
ramboxin 发表于 2019-12-12 08:47
% I# U$ \, k, i! C, B# P8 x1 a8 S不用socket吗?
1 j" t5 y& O3 z" r  R) U% Hint sock = socket(AF_AT, SOCK_STREAM, 0);
( _) a3 S; {# y) y: m    struct sockaddr_in serv_addr;

1 e- p0 \$ z% u3 r) f这里把write函数修改为send函数,即可
使用道具 举报 回复
发表于 2019-12-12 18:07:37 | 显示全部楼层
ramboxin 发表于 2019-12-12 17:30
9 K# f2 `& A; |/ u" w1 Z或者能不能付费指导,谢谢
! I; o$ v7 o" R: Q
看一下上面给你贴的源码,一个是TCP通信,一个是UDP通信,修改一下IP和端口就可以直接连接到你相应的服务器上面
使用道具 举报 回复
发表于 2019-12-12 18:12:41 | 显示全部楼层
ramboxin 发表于 2019-12-12 17:30
* P' }2 X, Z, ~: Q/ k0 L+ W* G+ ?或者能不能付费指导,谢谢

1 A+ W+ p1 q% X, k4 ^- g; Q& r哈哈。不用了,我也是找他们官方索要的这个源码。当时也是搞得我直接跪了。这里涉及到linux的一些通信方式,静下心来,先看一下上面的源码,官方文档确实很差劲,这是真的,我也是翻阅文档好几遍才发现使用的linux上面的,很像但不完全是
使用道具 举报 回复
发表于 2019-12-14 08:43:38 | 显示全部楼层
ROG 发表于 2019-12-12 18:12* B9 t* m+ \/ O( k, \* h# [+ L0 x
哈哈。不用了,我也是找他们官方索要的这个源码。当时也是搞得我直接跪了。这里涉及到linux的一些通信方 ...
, U: e) [$ u, P9 o
多谢,怎样才能给你悬赏,要不你答我的另外一个题目吧,随便写几句话就行。昨天终于调通了,原因是只能用域名,内网穿透的话用host = gethostbyname(req_uri);翻译的ip不对,所以一直调不对,不知道这个函数的真实面目,只能再研究了。另外,这个主动发送有了,用send函数,那么主动发送完后接收到的数据呢在哪儿存放着呢?还有就是服务器主动发送给我的数据放在哪儿呢?
使用道具 举报 回复
发表于 2019-12-14 09:41:28 | 显示全部楼层
ramboxin 发表于 2019-12-14 08:438 h5 [( B5 {2 K0 Q
多谢,怎样才能给你悬赏,要不你答我的另外一个题目吧,随便写几句话就行。昨天终于调通了,原因是只能用 ...

) B/ x  B4 {8 s9 w6 t0 W4 Q参见第一段代码的123行为发送函数。131行为接收函数。
使用道具 举报 回复
发表于 2019-12-14 09:48:43 | 显示全部楼层
ramboxin 发表于 2019-12-14 08:43
+ }3 [$ @* B# U, G( N: D多谢,怎样才能给你悬赏,要不你答我的另外一个题目吧,随便写几句话就行。昨天终于调通了,原因是只能用 ...
: |( G# `, _) I/ _6 n. n
把你遇到的问题可以分享出来,就是帮助
使用道具 举报 回复
发表于 2019-12-14 11:04:48 | 显示全部楼层
ROG 发表于 2019-12-14 09:41
4 k; a# c9 A; L参见第一段代码的123行为发送函数。131行为接收函数。

: j' K4 R! O8 r9 ~这个我认为是clint主动发送和接收;如果是clint被动发送和接收呢?(也就是说server是主动的)clint不知道什么时候去接收,是不是有个线程一直在跑,接收数据后放在一个buff中,接收完毕后提醒我呢?
使用道具 举报 回复
发表于 2019-12-14 14:37:33 | 显示全部楼层
本帖最后由 ROG 于 2019-12-14 14:45 编辑 2 @  {& j( t6 u& E/ C( L
ramboxin 发表于 2019-12-14 11:04
% P, t. D( [8 f0 V  m* j这个我认为是clint主动发送和接收;如果是clint被动发送和接收呢?(也就是说server是主动的)clint不知 ...
. R8 U$ s' w* ^1 c
这与你协议有关了。在官方文档首页最下端有个网络示例代码https://github.com/RT-Thread-packages/network-sample,你可以研究一下。你这要多看文档啊!我就是看几遍rtt文档才敢做项目的,rtt没有你想的那么简单。
使用道具 举报 回复
发表于 2019-12-16 19:37:31 | 显示全部楼层
ROG 发表于 2019-12-14 14:37
* X3 Z9 o* \1 Z9 f" q) T6 x! s% E% m这与你协议有关了。在官方文档首页最下端有个网络示例代码https://github.com/RT-Thread-packages/network ...

' X. K& ^- G+ [( |1 C; i! ^谢谢你,基本上可以使用了。我一定要把分给你,不知道怎么给。再次感谢。我qq:357393193方便联系
使用道具 举报 回复
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

Powered by RT-Thread

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