diff options
| author | David Lin <[email protected]> | 2020-04-17 18:39:04 +0800 |
|---|---|---|
| committer | GitHub <[email protected]> | 2020-04-17 18:39:04 +0800 |
| commit | 8e57dcb723071b37e09a06decddc16569ae79a77 (patch) | |
| tree | 9a8d0eb3cd586063c7ea1c525867a4868a77f92b /examples/network | |
| parent | 33f7124b3644314ca4ce96d9352b4ac973664a29 (diff) | |
Update tcpsendpacket.c
Diffstat (limited to 'examples/network')
| -rw-r--r-- | examples/network/tcpsendpacket.c | 37 |
1 files changed, 22 insertions, 15 deletions
diff --git a/examples/network/tcpsendpacket.c b/examples/network/tcpsendpacket.c index 75134c19a2..462de6000d 100644 --- a/examples/network/tcpsendpacket.c +++ b/examples/network/tcpsendpacket.c @@ -1,7 +1,7 @@ #include <rtthread.h> -#include <netdb.h> /* Ϊ�˽�������������Ҫ����netdb.hͷ�ļ� */ -#include <sys/socket.h> /* ʹ��BSD socket����Ҫ����socket.hͷ�ļ� */ +#include <netdb.h> /* 为了解析主机名,需要包含netdb.h头文件 */ +#include <sys/socket.h> /* 使用BSD socket,需要包含socket.h头文件 */ void tcp_senddata(const char *url, int port, int length) { @@ -10,45 +10,52 @@ void tcp_senddata(const char *url, int port, int length) struct sockaddr_in server_addr; rt_uint8_t *buffer_ptr; - /* ͨ��������ڲ���url���host��ַ��������������������������� */ + /* 通过函数入口参数url获得host地址(如果是域名,会做域名解析) */ host = gethostbyname(url); - /* ����һ��socket��������SOCKET_STREAM��TCP���� */ + /* 创建一个socket,类型是SOCKET_STREAM,TCP类型 */ if ((sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) == -1) { - /* ����socketʧ�� */ + /* 创建socket失败 */ rt_kprintf("Socket error\n"); return; } - /* �����ڴ� */ + /* 申请内存 */ buffer_ptr = rt_malloc(length); - /* ���췢������ */ + if(RT_NULL == buffer_ptr) + { + /* 申请内存失败 */ + rt_kprintf("Not enough memory\n"); + return; + } + + /* 构造发送数据 */ for (index = 0; index < length; index ++) buffer_ptr[index] = index & 0xff; timeout = 100; - /* ���÷��ͳ�ʱʱ��100ms */ + /* 设置发送超时时间100ms */ 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); while (1) { - /* �������ݵ�sock���� */ + /* 发送数据到sock连接 */ result = send(sock, buffer_ptr, length, MSG_DONTWAIT); - if (result < 0) //���ݷ��ʹ����� + if (result < 0) //数据发送错误处理 { rt_kprintf("TCP thread send error: %d\n", result); closesocket(sock); - /* �ر����ӣ����´������� */ + /* 关闭连接,重新创建连接 */ rt_thread_delay(10); if ((sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) == -1) @@ -59,7 +66,7 @@ void tcp_senddata(const char *url, int port, int length) } else if (result == 0) { - /* ��ӡsend��������ֵΪ0�ľ�����Ϣ */ + /* 打印send函数返回值为0的警告信息 */ rt_kprintf("\n Send warning,send function return 0.\r\n"); } } @@ -67,7 +74,7 @@ void tcp_senddata(const char *url, int port, int length) #ifdef RT_USING_FINSH #include <finsh.h> -/* ���tcpclient������finsh shell�� */ +/* 输出tcpclient函数到finsh shell中 */ FINSH_FUNCTION_EXPORT(tcp_senddata, send a packet through tcp connection); #endif |
