tcpclient.c 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. #include <rtthread.h>
  2. #include <lwip/netdb.h>
  3. #include <lwip/sockets.h>
  4. static const char send_data[] = "This is TCP Client from RT-Thread.";
  5. void tcpclient(const char* url, int port)
  6. {
  7. char *recv_data;
  8. struct hostent *host;
  9. int sock, bytes_received;
  10. struct sockaddr_in server_addr;
  11. host = gethostbyname(url);
  12. recv_data = rt_malloc(1024);
  13. if (recv_data == RT_NULL)
  14. {
  15. rt_kprintf("No memory\n");
  16. return;
  17. }
  18. if ((sock = socket(AF_INET, SOCK_STREAM, 0)) == -1)
  19. {
  20. rt_kprintf("Socket error\n");
  21. /* release recv buffer */
  22. rt_free(recv_data);
  23. return;
  24. }
  25. server_addr.sin_family = AF_INET;
  26. server_addr.sin_port = htons(port);
  27. server_addr.sin_addr = *((struct in_addr *)host->h_addr);
  28. rt_memset(&(server_addr.sin_zero), 0, sizeof(server_addr.sin_zero));
  29. if (connect(sock, (struct sockaddr *)&server_addr, sizeof(struct sockaddr)) == -1)
  30. {
  31. rt_kprintf("Connect error\n");
  32. /* release recv buffer */
  33. rt_free(recv_data);
  34. return;
  35. }
  36. while(1)
  37. {
  38. bytes_received = recv(sock, recv_data, 1024, 0);
  39. if (bytes_received < 0)
  40. {
  41. lwip_close(sock);
  42. /* release recv buffer */
  43. rt_free(recv_data);
  44. break;
  45. }
  46. recv_data[bytes_received] = '\0';
  47. if (strcmp(recv_data , "q") == 0 || strcmp(recv_data , "Q") == 0)
  48. {
  49. lwip_close(sock);
  50. /* release recv buffer */
  51. rt_free(recv_data);
  52. break;
  53. }
  54. else
  55. {
  56. rt_kprintf("\nRecieved data = %s " , recv_data);
  57. }
  58. send(sock,send_data,strlen(send_data), 0);
  59. }
  60. return;
  61. }
  62. #ifdef RT_USING_FINSH
  63. #include <finsh.h>
  64. FINSH_FUNCTION_EXPORT(tcpclient, startup tcp client);
  65. #endif