| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122 |
- #include "board.h"
- #include "FreeRTOS.h"
- #include "task.h"
- #include <stdio.h>
- #if 1 // 使用SOCKET接口
- #include "sockets.h"
- void eth_tcp_client_test(void *pvParameters)
- {
- struct sockaddr_in atk_client_addr;
- err_t err;
- int recv_data_len;
- int g_sock;
- char g_lwip_demo_recvbuf[1524];
- int i;
- printf("-------------- Lwip TCP Client Test Start! -------------\n");
- while (1) {
- sock_start:
- atk_client_addr.sin_family = AF_INET; /* 表示IPv4网络协议 */
- atk_client_addr.sin_port = htons(8087); /* 端口号 */
- atk_client_addr.sin_addr.s_addr = inet_addr("192.168.137.1"); /* 远程IP地址 */
- g_sock = socket(AF_INET, SOCK_STREAM, 0); /* 可靠数据流交付服务既是TCP协议 */
- memset(&(atk_client_addr.sin_zero), 0, sizeof(atk_client_addr.sin_zero));
- /* 连接远程IP地址 */
- err = connect(g_sock, (struct sockaddr *)&atk_client_addr, sizeof(struct sockaddr));
- if (err == -1) {
- printf("connect fail!\r\n");
- g_sock = -1;
- closesocket(g_sock);
- vTaskDelay(pdMS_TO_TICKS(100));
- goto sock_start;
- }
- printf("connect success!\r\n");
- while (1) {
- recv_data_len = recv(g_sock, g_lwip_demo_recvbuf, sizeof(g_lwip_demo_recvbuf), 0);
- if (recv_data_len <= 0 ) {
- closesocket(g_sock);
- g_sock = -1;
- goto sock_start;
- } else {
- printf("\nrx data:\n");
- for (i = 0; i < recv_data_len; i++) {
- printf("%c", g_lwip_demo_recvbuf[i]);
- }
- send(g_sock, g_lwip_demo_recvbuf, recv_data_len, 0);
- }
- }
- }
- }
- #else // 使用NETCONN接口
- #include "tcpip.h"
- #include "api.h"
- void eth_tcp_client_test(void *pvParameters)
- {
- static struct netconn *tcp_clientconn = NULL; /* TCP CLIENT网络连接结构体 */
- uint32_t data_len = 0;
- struct pbuf *q;
- err_t err,recv_err;
- ip4_addr_t server_ipaddr,loca_ipaddr;
- static uint16_t server_port,loca_port;
- BaseType_t lwip_err;
- int i;
- printf("-------------- Lwip TCP Client Test Start! -------------\n");
- server_port = 8087;
- IP4_ADDR(&server_ipaddr, 192, 168, 137, 1); /* 构造目的IP地址 */
- while (1)
- {
- tcp_clientconn = netconn_new(NETCONN_TCP); /* 创建一个TCP链接 */
- err = netconn_connect(tcp_clientconn,&server_ipaddr,server_port); /* 连接服务器 */
- if (err != ERR_OK)
- {
- printf("connect fail!\r\n");
- netconn_delete(tcp_clientconn); /* 返回值不等于ERR_OK,删除tcp_clientconn连接 */
- }
- else if (err == ERR_OK) /* 处理新连接的数据 */
- {
- printf("connect success!\n");
- struct netbuf *recvbuf;
- tcp_clientconn->recv_timeout = 10;
- netconn_getaddr(tcp_clientconn,&loca_ipaddr,&loca_port,1); /* 获取本地IP主机IP地址和端口号 */
- printf("port:%d\r\n",loca_port);
- while (1)
- {
- if ((recv_err = netconn_recv(tcp_clientconn,&recvbuf)) == ERR_OK) { /* 接收到数据 */
- for (q = recvbuf->p;q != NULL;q = q->next) { /* 遍历完整个pbuf链表 */
- err = netconn_write(tcp_clientconn, q->payload, q->len, NETCONN_COPY); /* 发送tcp_server_sentbuf中的数据 */
- if (err != ERR_OK) {
- printf("tx fail!\r\n");
- }
- for (i=0; i<q->len; i++)
- printf("%c", ((char *)q->payload)[i]);
- }
- netbuf_delete(recvbuf);
- } else if (recv_err == ERR_CLSD) { /* 关闭连接 */
- netconn_close(tcp_clientconn);
- netconn_delete(tcp_clientconn);
- break;
- }
- }
- }
- }
- }
- #endif
|