[examples] code cleanup.

This commit is contained in:
Bernard Xiong 2017-08-10 14:09:57 +08:00
parent f6b6a5cf22
commit 5f4bcfa3e1
3 changed files with 99 additions and 83 deletions

View File

@ -1,16 +1,17 @@
#include <rtthread.h> #include <rtthread.h>
#include <lwip/netdb.h> /* 为了解析主机名需要包含netdb.h头文件 */
#include <lwip/netdb.h> /* 为了解析主机名需要包含netdb.h头文件 */
#include <lwip/sockets.h> /* 使用BSD socket需要包含sockets.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."; /* 发送用到的数据 */ static const char send_data[] = "This is TCP Client from RT-Thread."; /* 发送用到的数据 */
void tcpclient(const char* url, int port) void tcpclient(const char* url, int port)
{ {
int ret;
char *recv_data; char *recv_data;
struct hostent *host; struct hostent *host;
int sock, bytes_received; int sock, bytes_received;
int ret;
struct sockaddr_in server_addr; struct sockaddr_in server_addr;
/* 通过函数入口参数url获得host地址如果是域名会做域名解析 */ /* 通过函数入口参数url获得host地址如果是域名会做域名解析 */
@ -61,15 +62,18 @@ void tcpclient(const char* url, int port)
{ {
/* 接收失败,关闭这个连接 */ /* 接收失败,关闭这个连接 */
lwip_close(sock); 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); rt_free(recv_data);
break; break;
}else if (bytes_received == 0) }
{ else if (bytes_received == 0)
/* 打印recv函数返回值为0的警告信息 */ {
rt_kprintf("\nReceived warning,recv function return 0.\r\n"); /* 打印recv函数返回值为0的警告信息 */
} rt_kprintf("\nReceived warning,recv function return 0.\r\n");
continue;
}
/* 有接收到数据,把末端清零 */ /* 有接收到数据,把末端清零 */
recv_data[bytes_received] = '\0'; recv_data[bytes_received] = '\0';
@ -78,7 +82,8 @@ void tcpclient(const char* url, int port)
{ {
/* 如果是首字母是q或Q关闭这个连接 */ /* 如果是首字母是q或Q关闭这个连接 */
lwip_close(sock); 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); rt_free(recv_data);
break; break;
@ -91,17 +96,20 @@ void tcpclient(const char* url, int port)
/* 发送数据到sock连接 */ /* 发送数据到sock连接 */
ret = send(sock,send_data,strlen(send_data), 0); ret = send(sock,send_data,strlen(send_data), 0);
if (ret < 0) if (ret < 0)
{ {
/* 接收失败,关闭这个连接 */ /* 接收失败,关闭这个连接 */
lwip_close(sock); 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; break;
}else if (ret == 0) }
{ else if (ret == 0)
/* 打印send函数返回值为0的警告信息 */ {
rt_kprintf("\n Send warning,send function return 0.\r\n"); /* 打印send函数返回值为0的警告信息 */
} rt_kprintf("\n Send warning,send function return 0.\r\n");
}
} }
return; return;

View File

@ -1,62 +1,67 @@
#include <rtthread.h> #include <rtthread.h>
#include <lwip/netdb.h> /* 为了解析主机名需要包含netdb.h头文件 */ #include <lwip/netdb.h> /* 为了解析主机名需要包含netdb.h头文件 */
#include <lwip/sockets.h> /* 使用BSD socket需要包含sockets.h头文件 */ #include <lwip/sockets.h> /* 使用BSD socket需要包含sockets.h头文件 */
void tcp_senddata(const char* url, int port, int length) void tcp_senddata(const char* url, int port, int length)
{ {
struct hostent *host; struct hostent *host;
int sock, err, result, timeout, index; int sock, err, result, timeout, index;
struct sockaddr_in server_addr; struct sockaddr_in server_addr;
rt_uint8_t *buffer_ptr; rt_uint8_t *buffer_ptr;
/* 通过函数入口参数url获得host地址如果是域名会做域名解析 */ /* 通过函数入口参数url获得host地址如果是域名会做域名解析 */
host = gethostbyname(url); host = gethostbyname(url);
/* 创建一个socket类型是SOCKET_STREAMTCP类型 */ /* 创建一个socket类型是SOCKET_STREAMTCP类型 */
if ((sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) == -1) if ((sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) == -1)
{ {
/* 创建socket失败 */ /* 创建socket失败 */
rt_kprintf("Socket error\n"); rt_kprintf("Socket error\n");
return; return;
} }
/* 申请内存 */ /* 申请内存 */
buffer_ptr = rt_malloc(length); buffer_ptr = rt_malloc(length);
/* 构造发送数据 */ /* 构造发送数据 */
for (index = 0; index < length; index ++) for (index = 0; index < length; index ++)
buffer_ptr[index] = index & 0xff; buffer_ptr[index] = index & 0xff;
timeout = 100; timeout = 100;
/* 设置发送超时时间100ms */ /* 设置发送超时时间100ms */
lwip_setsockopt(sock, SOL_SOCKET, SO_SNDTIMEO, &timeout, sizeof(timeout)); lwip_setsockopt(sock, SOL_SOCKET, SO_SNDTIMEO, &timeout, sizeof(timeout));
/* 初始化预连接的服务端地址 */ /* 初始化预连接的服务端地址 */
server_addr.sin_family = AF_INET; server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(port); server_addr.sin_port = htons(port);
server_addr.sin_addr = *((struct in_addr *)host->h_addr); server_addr.sin_addr = *((struct in_addr *)host->h_addr);
rt_memset(&(server_addr.sin_zero), 0, sizeof(server_addr.sin_zero)); rt_memset(&(server_addr.sin_zero), 0, sizeof(server_addr.sin_zero));
/* 连接到服务端 */ /* 连接到服务端 */
err = connect(sock, (struct sockaddr *)&server_addr, sizeof(struct sockaddr)); err = connect(sock, (struct sockaddr *)&server_addr, sizeof(struct sockaddr));
rt_kprintf("TCP thread connect error code: %d\n", err); rt_kprintf("TCP thread connect error code: %d\n", err);
while(1) while(1)
{ {
/* 发送数据到sock连接 */ /* 发送数据到sock连接 */
result = send(sock, buffer_ptr, length, MSG_DONTWAIT); result = send(sock, buffer_ptr, length, MSG_DONTWAIT);
if(result == -1) //数据发送错误处理 if(result < 0) //数据发送错误处理
{ {
rt_kprintf("TCP thread send error: %d\n", result); rt_kprintf("TCP thread send error: %d\n", result);
lwip_close(sock); //关闭连接,重新创建连接 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); rt_thread_delay(10);
err = connect(sock, (struct sockaddr *)&server_addr, sizeof(struct sockaddr));
rt_kprintf("TCP thread connect error code: %d\n", err); if ((sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) == -1)
}else if (result == 0) rt_kprintf("TCP Socket error:%d\n",sock);
{
/* 打印send函数返回值为0的警告信息 */ err = connect(sock, (struct sockaddr *)&server_addr, sizeof(struct sockaddr));
rt_kprintf("\n Send warning,send function return 0.\r\n"); 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 #ifdef RT_USING_FINSH

View File

@ -74,18 +74,19 @@ void tcpserv(void* parameter)
{ {
/* 发送数据到connected socket */ /* 发送数据到connected socket */
ret = send(connected, send_data, strlen(send_data), 0); ret = send(connected, send_data, strlen(send_data), 0);
if (ret < 0) if (ret < 0)
{ {
/* 接收失败,关闭这个连接 */ /* 发送失败,关闭这个连接 */
lwip_close(sock); lwip_close(connected);
rt_kprintf("\nsend error,close the socket.\r\n"); rt_kprintf("\nsend error,close the socket.\r\n");
break; break;
}else if (ret == 0) }
{ else if (ret == 0)
/* 打印send函数返回值为0的警告信息 */ {
rt_kprintf("\n Send warning,send function return 0.\r\n"); /* 打印send函数返回值为0的警告信息 */
} rt_kprintf("\n Send warning,send function return 0.\r\n");
}
/* 从connected socket中接收数据接收buffer是1024大小但并不一定能够收到1024大小的数据 */ /* 从connected socket中接收数据接收buffer是1024大小但并不一定能够收到1024大小的数据 */
bytes_received = recv(connected,recv_data, 1024, 0); bytes_received = recv(connected,recv_data, 1024, 0);
if (bytes_received < 0) if (bytes_received < 0)
@ -93,11 +94,13 @@ void tcpserv(void* parameter)
/* 接收失败关闭这个connected socket */ /* 接收失败关闭这个connected socket */
lwip_close(connected); lwip_close(connected);
break; break;
}else if (bytes_received == 0) }
{ else if (bytes_received == 0)
/* 打印recv函数返回值为0的警告信息 */ {
rt_kprintf("\nReceived warning,recv function return 0.\r\n"); /* 打印recv函数返回值为0的警告信息 */
} rt_kprintf("\nReceived warning,recv function return 0.\r\n");
continue;
}
/* 有接收到数据,把末端清零 */ /* 有接收到数据,把末端清零 */
recv_data[bytes_received] = '\0'; recv_data[bytes_received] = '\0';