11#include <rtthread.h>
22
3- #include <netdb.h> /* 为了解析主机名,需要包含netdb.h头文件 */
4- #include <sys/socket.h> /* 使用BSD socket,需要包含socket.h头文件 */
3+ #include <netdb.h> /* 为了解析主机名,需要包含netdb.h头文件 */
4+ #include <sys/socket.h> /* 使用BSD socket,需要包含socket.h头文件 */
55
66void tcp_senddata (const char * url , int port , int length )
77{
@@ -10,45 +10,52 @@ void tcp_senddata(const char *url, int port, int length)
1010 struct sockaddr_in server_addr ;
1111 rt_uint8_t * buffer_ptr ;
1212
13- /* 通过函数入口参数url获得host地址(如果是域名,会做域名解析) */
13+ /* 通过函数入口参数url获得host地址(如果是域名,会做域名解析) */
1414 host = gethostbyname (url );
15- /* 创建一个socket,类型是SOCKET_STREAM,TCP类型 */
15+ /* 创建一个socket,类型是SOCKET_STREAM,TCP类型 */
1616 if ((sock = socket (AF_INET , SOCK_STREAM , IPPROTO_TCP )) == -1 )
1717 {
18- /* 创建socket失败 */
18+ /* 创建socket失败 */
1919 rt_kprintf ("Socket error\n" );
2020 return ;
2121 }
2222
23- /* 申请内存 */
23+ /* 申请内存 */
2424 buffer_ptr = rt_malloc (length );
25- /* 构造发送数据 */
25+ if (RT_NULL == buffer_ptr )
26+ {
27+ /* 申请内存失败 */
28+ rt_kprintf ("Not enough memory\n" );
29+ return ;
30+ }
31+
32+ /* 构造发送数据 */
2633 for (index = 0 ; index < length ; index ++ )
2734 buffer_ptr [index ] = index & 0xff ;
2835
2936 timeout = 100 ;
30- /* 设置发送超时时间100ms */
37+ /* 设置发送超时时间100ms */
3138 setsockopt (sock , SOL_SOCKET , SO_SNDTIMEO , & timeout , sizeof (timeout ));
32- /* 初始化预连接的服务端地址 */
39+ /* 初始化预连接的服务端地址 */
3340 server_addr .sin_family = AF_INET ;
3441 server_addr .sin_port = htons (port );
3542 server_addr .sin_addr = * ((struct in_addr * )host -> h_addr );
3643 rt_memset (& (server_addr .sin_zero ), 0 , sizeof (server_addr .sin_zero ));
3744
38- /* 连接到服务端 */
45+ /* 连接到服务端 */
3946 err = connect (sock , (struct sockaddr * )& server_addr , sizeof (struct sockaddr ));
4047 rt_kprintf ("TCP thread connect error code: %d\n" , err );
4148
4249 while (1 )
4350 {
44- /* 发送数据到sock连接 */
51+ /* 发送数据到sock连接 */
4552 result = send (sock , buffer_ptr , length , MSG_DONTWAIT );
46- if (result < 0 ) //数据发送错误处理
53+ if (result < 0 ) //数据发送错误处理
4754 {
4855 rt_kprintf ("TCP thread send error: %d\n" , result );
4956 closesocket (sock );
5057
51- /* 关闭连接,重新创建连接 */
58+ /* 关闭连接,重新创建连接 */
5259 rt_thread_delay (10 );
5360
5461 if ((sock = socket (AF_INET , SOCK_STREAM , IPPROTO_TCP )) == -1 )
@@ -59,15 +66,15 @@ void tcp_senddata(const char *url, int port, int length)
5966 }
6067 else if (result == 0 )
6168 {
62- /* 打印send函数返回值为0的警告信息 */
69+ /* 打印send函数返回值为0的警告信息 */
6370 rt_kprintf ("\n Send warning,send function return 0.\r\n" );
6471 }
6572 }
6673}
6774
6875#ifdef RT_USING_FINSH
6976#include <finsh.h>
70- /* 输出tcpclient函数到finsh shell中 */
77+ /* 输出tcpclient函数到finsh shell中 */
7178FINSH_FUNCTION_EXPORT (tcp_senddata , send a packet through tcp connection );
7279#endif
7380
0 commit comments