diff --git a/examples/network/tcpclient.c b/examples/network/tcpclient.c index 529c612b9a..c7a53c609f 100644 --- a/examples/network/tcpclient.c +++ b/examples/network/tcpclient.c @@ -1,16 +1,17 @@ #include -#include /* 为了解析主机名,需要包含netdb.h头文件 */ + +#include /* 为了解析主机名,需要包含netdb.h头文件 */ #include /* 使用BSD socket,需要包含sockets.h头文件 */ -#define BUFSZ 1024 +#define BUFSZ 1024 static const char send_data[] = "This is TCP Client from RT-Thread."; /* 发送用到的数据 */ void tcpclient(const char* url, int port) { + int ret; char *recv_data; struct hostent *host; int sock, bytes_received; - int ret; struct sockaddr_in server_addr; /* 通过函数入口参数url获得host地址(如果是域名,会做域名解析) */ @@ -61,15 +62,18 @@ void tcpclient(const char* url, int port) { /* 接收失败,关闭这个连接 */ lwip_close(sock); - rt_kprintf("\nreceived error,close the socket.\r\n"); + rt_kprintf("\nreceived error,close the socket.\r\n"); + /* 释放接收缓冲 */ rt_free(recv_data); break; - }else if (bytes_received == 0) - { - /* 打印recv函数返回值为0的警告信息 */ - rt_kprintf("\nReceived warning,recv function return 0.\r\n"); - } + } + else if (bytes_received == 0) + { + /* 打印recv函数返回值为0的警告信息 */ + rt_kprintf("\nReceived warning,recv function return 0.\r\n"); + continue; + } /* 有接收到数据,把末端清零 */ recv_data[bytes_received] = '\0'; @@ -78,7 +82,8 @@ void tcpclient(const char* url, int port) { /* 如果是首字母是q或Q,关闭这个连接 */ lwip_close(sock); - rt_kprintf("\n got a 'q' or 'Q',close the socket.\r\n"); + rt_kprintf("\n got a 'q' or 'Q',close the socket.\r\n"); + /* 释放接收缓冲 */ rt_free(recv_data); break; @@ -91,17 +96,20 @@ void tcpclient(const char* url, int port) /* 发送数据到sock连接 */ ret = send(sock,send_data,strlen(send_data), 0); - if (ret < 0) + if (ret < 0) { /* 接收失败,关闭这个连接 */ lwip_close(sock); - rt_kprintf("\nsend error,close the socket.\r\n"); + rt_kprintf("\nsend error,close the socket.\r\n"); + + rt_free(recv_data); break; - }else if (ret == 0) - { - /* 打印send函数返回值为0的警告信息 */ - rt_kprintf("\n Send warning,send function return 0.\r\n"); - } + } + else if (ret == 0) + { + /* 打印send函数返回值为0的警告信息 */ + rt_kprintf("\n Send warning,send function return 0.\r\n"); + } } return; diff --git a/examples/network/tcpsendpacket.c b/examples/network/tcpsendpacket.c index ec23a15d23..e7c514806e 100644 --- a/examples/network/tcpsendpacket.c +++ b/examples/network/tcpsendpacket.c @@ -1,62 +1,67 @@ #include -#include /* Ϊ˽Ҫnetdb.hͷļ */ +#include /* Ϊ˽Ҫnetdb.hͷļ */ #include /* ʹBSD socketҪsockets.hͷļ */ void tcp_senddata(const char* url, int port, int length) { - struct hostent *host; - int sock, err, result, timeout, index; - struct sockaddr_in server_addr; - rt_uint8_t *buffer_ptr; + struct hostent *host; + int sock, err, result, timeout, index; + struct sockaddr_in server_addr; + rt_uint8_t *buffer_ptr; - /* ͨڲurlhostַ */ - host = gethostbyname(url); - /* һsocketSOCKET_STREAMTCP */ - if ((sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) == -1) - { - /* socketʧ */ - rt_kprintf("Socket error\n"); - return; - } + /* ͨڲurlhostַ */ + host = gethostbyname(url); + /* һsocketSOCKET_STREAMTCP */ + if ((sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) == -1) + { + /* socketʧ */ + rt_kprintf("Socket error\n"); + return; + } - /* ڴ */ - buffer_ptr = rt_malloc(length); - /* 췢 */ - for (index = 0; index < length; index ++) - buffer_ptr[index] = index & 0xff; + /* ڴ */ + buffer_ptr = rt_malloc(length); + /* 췢 */ + for (index = 0; index < length; index ++) + buffer_ptr[index] = index & 0xff; - timeout = 100; - /* ÷ͳʱʱ100ms */ - lwip_setsockopt(sock, SOL_SOCKET, SO_SNDTIMEO, &timeout, sizeof(timeout)); - /* ʼԤӵķ˵ַ */ - 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)); + timeout = 100; + /* ÷ͳʱʱ100ms */ + lwip_setsockopt(sock, SOL_SOCKET, SO_SNDTIMEO, &timeout, sizeof(timeout)); + /* ʼԤӵķ˵ַ */ + 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)); - /* ӵ */ - err = connect(sock, (struct sockaddr *)&server_addr, sizeof(struct sockaddr)); - rt_kprintf("TCP thread connect error code: %d\n", err); + /* ӵ */ + err = connect(sock, (struct sockaddr *)&server_addr, sizeof(struct sockaddr)); + rt_kprintf("TCP thread connect error code: %d\n", err); - while(1) - { - /* ݵsock */ - result = send(sock, buffer_ptr, length, MSG_DONTWAIT); - if(result == -1) //ݷʹ - { - rt_kprintf("TCP thread send error: %d\n", result); - lwip_close(sock); //رӣ´ - rt_thread_delay(10); - if ((sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) == -1) - rt_kprintf("TCP Socket error:%d\n",sock); - err = connect(sock, (struct sockaddr *)&server_addr, sizeof(struct sockaddr)); - rt_kprintf("TCP thread connect error code: %d\n", err); - }else if (result == 0) - { - /* ӡsendֵΪ0ľϢ */ - rt_kprintf("\n Send warning,send function return 0.\r\n"); - } - } + while(1) + { + /* ݵsock */ + result = send(sock, buffer_ptr, length, MSG_DONTWAIT); + if(result < 0) //ݷʹ + { + rt_kprintf("TCP thread send error: %d\n", result); + lwip_close(sock); + + /* رӣ´ */ + rt_thread_delay(10); + + if ((sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) == -1) + rt_kprintf("TCP Socket error:%d\n",sock); + + err = connect(sock, (struct sockaddr *)&server_addr, sizeof(struct sockaddr)); + rt_kprintf("TCP thread connect error code: %d\n", err); + } + else if (result == 0) + { + /* ӡsendֵΪ0ľϢ */ + rt_kprintf("\n Send warning,send function return 0.\r\n"); + } + } } #ifdef RT_USING_FINSH diff --git a/examples/network/tcpserver.c b/examples/network/tcpserver.c index e68d9e53f0..c08949ea83 100644 --- a/examples/network/tcpserver.c +++ b/examples/network/tcpserver.c @@ -74,18 +74,19 @@ void tcpserv(void* parameter) { /* 发送数据到connected socket */ ret = send(connected, send_data, strlen(send_data), 0); - if (ret < 0) - { - /* 接收失败,关闭这个连接 */ - lwip_close(sock); - rt_kprintf("\nsend error,close the socket.\r\n"); - break; - }else if (ret == 0) - { - /* 打印send函数返回值为0的警告信息 */ - rt_kprintf("\n Send warning,send function return 0.\r\n"); - } - + if (ret < 0) + { + /* 发送失败,关闭这个连接 */ + lwip_close(connected); + rt_kprintf("\nsend error,close the socket.\r\n"); + break; + } + else if (ret == 0) + { + /* 打印send函数返回值为0的警告信息 */ + rt_kprintf("\n Send warning,send function return 0.\r\n"); + } + /* 从connected socket中接收数据,接收buffer是1024大小,但并不一定能够收到1024大小的数据 */ bytes_received = recv(connected,recv_data, 1024, 0); if (bytes_received < 0) @@ -93,11 +94,13 @@ void tcpserv(void* parameter) /* 接收失败,关闭这个connected socket */ lwip_close(connected); break; - }else if (bytes_received == 0) - { - /* 打印recv函数返回值为0的警告信息 */ - rt_kprintf("\nReceived warning,recv function return 0.\r\n"); - } + } + else if (bytes_received == 0) + { + /* 打印recv函数返回值为0的警告信息 */ + rt_kprintf("\nReceived warning,recv function return 0.\r\n"); + continue; + } /* 有接收到数据,把末端清零 */ recv_data[bytes_received] = '\0';