diff --git a/examples/network/tcpclient.c b/examples/network/tcpclient.c index 9927847f74c7b44f9866a7768550f1b3d4407627..f583fb40ff26af0d92c11a6e5f9043dbf581742e 100644 --- a/examples/network/tcpclient.c +++ b/examples/network/tcpclient.c @@ -7,87 +7,88 @@ static const char send_data[] = "This is TCP Client from RT-Thread."; /* 发送用到的数据 */ void tcpclient(const char* url, int port) { - char *recv_data; - struct hostent *host; - int sock, bytes_received; - struct sockaddr_in server_addr; - - /* 通过函数入口参数url获得host地址(如果是域名,会做域名解析) */ - host = gethostbyname(url); - - /* 分配用于存放接收数据的缓冲 */ - recv_data = rt_malloc(BUFSZ); - if (recv_data == RT_NULL) - { - rt_kprintf("No memory\n"); - return; - } - - /* 创建一个socket,类型是SOCKET_STREAM,TCP类型 */ - if ((sock = socket(AF_INET, SOCK_STREAM, 0)) == -1) - { - /* 创建socket失败 */ - rt_kprintf("Socket error\n"); - - /* 释放接收缓冲 */ - rt_free(recv_data); - return; - } - - /* 初始化预连接的服务端地址 */ - server_addr.sin_family = AF_INET; - server_addr.sin_port = htons(port); - server_addr.sin_addr = *((struct in_addr *)host->h_addr); - rt_memset(&(server_addr.sin_zero), 0, sizeof(server_addr.sin_zero)); - - /* 连接到服务端 */ - if (connect(sock, (struct sockaddr *)&server_addr, sizeof(struct sockaddr)) == -1) - { - /* 连接失败 */ - rt_kprintf("Connect error\n"); - - /*释放接收缓冲 */ - rt_free(recv_data); - return; - } - - while(1) - { - /* 从sock连接中接收最大BUFSZ - 1字节数据 */ - bytes_received = recv(sock, recv_data, BUFSZ - 1, 0); - if (bytes_received <= 0) - { - /* 接收失败,关闭这个连接 */ - lwip_close(sock); - - /* 释放接收缓冲 */ - rt_free(recv_data); - break; - } - - /* 有接收到数据,把末端清零 */ - recv_data[bytes_received] = '\0'; - - if (strcmp(recv_data , "q") == 0 || strcmp(recv_data , "Q") == 0) - { - /* 如果是首字母是q或Q,关闭这个连接 */ - lwip_close(sock); - - /* 释放接收缓冲 */ - rt_free(recv_data); - break; - } - else - { - /* 在控制终端显示收到的数据 */ - rt_kprintf("\nRecieved data = %s " , recv_data); - } - - /* 发送数据到sock连接 */ - send(sock,send_data,strlen(send_data), 0); - } - - return; + char *recv_data; + struct hostent *host; + int sock, bytes_received; + struct sockaddr_in server_addr; + + /* 通过函数入口参数url获得host地址(如果是域名,会做域名解析) */ + host = gethostbyname(url); + + /* 分配用于存放接收数据的缓冲 */ + recv_data = rt_malloc(BUFSZ); + if (recv_data == RT_NULL) + { + rt_kprintf("No memory\n"); + return; + } + + /* 创建一个socket,类型是SOCKET_STREAM,TCP类型 */ + if ((sock = socket(AF_INET, SOCK_STREAM, 0)) == -1) + { + /* 创建socket失败 */ + rt_kprintf("Socket error\n"); + + /* 释放接收缓冲 */ + rt_free(recv_data); + return; + } + + /* 初始化预连接的服务端地址 */ + server_addr.sin_family = AF_INET; + server_addr.sin_port = htons(port); + server_addr.sin_addr = *((struct in_addr *)host->h_addr); + rt_memset(&(server_addr.sin_zero), 0, sizeof(server_addr.sin_zero)); + + /* 连接到服务端 */ + if (connect(sock, (struct sockaddr *)&server_addr, sizeof(struct sockaddr)) == -1) + { + /* 连接失败 */ + rt_kprintf("Connect fail!\n"); + lwip_close(sock); + + /*释放接收缓冲 */ + rt_free(recv_data); + return; + } + + while(1) + { + /* 从sock连接中接收最大BUFSZ - 1字节数据 */ + bytes_received = recv(sock, recv_data, BUFSZ - 1, 0); + if (bytes_received <= 0) + { + /* 接收失败,关闭这个连接 */ + lwip_close(sock); + + /* 释放接收缓冲 */ + rt_free(recv_data); + break; + } + + /* 有接收到数据,把末端清零 */ + recv_data[bytes_received] = '\0'; + + if (strcmp(recv_data , "q") == 0 || strcmp(recv_data , "Q") == 0) + { + /* 如果是首字母是q或Q,关闭这个连接 */ + lwip_close(sock); + + /* 释放接收缓冲 */ + rt_free(recv_data); + break; + } + else + { + /* 在控制终端显示收到的数据 */ + rt_kprintf("\nRecieved data = %s " , recv_data); + } + + /* 发送数据到sock连接 */ + send(sock,send_data,strlen(send_data), 0); + } + + return; } #ifdef RT_USING_FINSH