summaryrefslogtreecommitdiff
path: root/examples/network/tcpclient.c
diff options
context:
space:
mode:
Diffstat (limited to 'examples/network/tcpclient.c')
-rw-r--r--examples/network/tcpclient.c32
1 files changed, 28 insertions, 4 deletions
diff --git a/examples/network/tcpclient.c b/examples/network/tcpclient.c
index 7a0d4b5365..c7a53c609f 100644
--- a/examples/network/tcpclient.c
+++ b/examples/network/tcpclient.c
@@ -1,12 +1,14 @@
#include <rtthread.h>
-#include <lwip/netdb.h> /* 为了解析主机名,需要包含netdb.h头文件 */
+
+#include <lwip/netdb.h> /* 为了解析主机名,需要包含netdb.h头文件 */
#include <lwip/sockets.h> /* 使用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;
@@ -56,15 +58,22 @@ void tcpclient(const char* url, int port)
{
/* 从sock连接中接收最大BUFSZ - 1字节数据 */
bytes_received = recv(sock, recv_data, BUFSZ - 1, 0);
- if (bytes_received <= 0)
+ if (bytes_received < 0)
{
/* 接收失败,关闭这个连接 */
lwip_close(sock);
+ 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");
+ continue;
+ }
/* 有接收到数据,把末端清零 */
recv_data[bytes_received] = '\0';
@@ -73,6 +82,7 @@ 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_free(recv_data);
@@ -85,7 +95,21 @@ void tcpclient(const char* url, int port)
}
/* 发送数据到sock连接 */
- send(sock,send_data,strlen(send_data), 0);
+ ret = send(sock,send_data,strlen(send_data), 0);
+ if (ret < 0)
+ {
+ /* 接收失败,关闭这个连接 */
+ lwip_close(sock);
+ 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");
+ }
}
return;