1 #include <rtthread.h> 2 3 #include <netdb.h> /* Ϊ�˽�������������Ҫ����netdb.hͷ�ļ� */ 4 #include <sys/socket.h> /* ʹ��BSD socket����Ҫ����socket.hͷ�ļ� */ 5 6 void tcp_senddata(const char *url, int port, int length) 7 { 8 struct hostent *host; 9 int sock, err, result, timeout, index; 10 struct sockaddr_in server_addr; 11 rt_uint8_t *buffer_ptr; 12 13 /* ͨ��������ڲ���url���host��ַ��������������������������� */ 14 host = gethostbyname(url); 15 /* ����һ��socket��������SOCKET_STREAM��TCP���� */ 16 if ((sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) == -1) 17 { 18 /* ����socketʧ�� */ 19 rt_kprintf("Socket error\n"); 20 return; 21 } 22 23 /* �����ڴ� */ 24 buffer_ptr = rt_malloc(length); 25 /* ���췢������ */ 26 for (index = 0; index < length; index ++) 27 buffer_ptr[index] = index & 0xff; 28 29 timeout = 100; 30 /* ���÷��ͳ�ʱʱ��100ms */ 31 setsockopt(sock, SOL_SOCKET, SO_SNDTIMEO, &timeout, sizeof(timeout)); 32 /* ��ʼ��Ԥ���ӵķ���˵�ַ */ 33 server_addr.sin_family = AF_INET; 34 server_addr.sin_port = htons(port); 35 server_addr.sin_addr = *((struct in_addr *)host->h_addr); 36 rt_memset(&(server_addr.sin_zero), 0, sizeof(server_addr.sin_zero)); 37 38 /* ���ӵ������ */ 39 err = connect(sock, (struct sockaddr *)&server_addr, sizeof(struct sockaddr)); 40 rt_kprintf("TCP thread connect error code: %d\n", err); 41 42 while (1) 43 { 44 /* �������ݵ�sock���� */ 45 result = send(sock, buffer_ptr, length, MSG_DONTWAIT); 46 if (result < 0) //���ݷ��ʹ����� 47 { 48 rt_kprintf("TCP thread send error: %d\n", result); 49 closesocket(sock); 50 51 /* �ر����ӣ����´������� */ 52 rt_thread_delay(10); 53 54 if ((sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) == -1) 55 rt_kprintf("TCP Socket error:%d\n", sock); 56 57 err = connect(sock, (struct sockaddr *)&server_addr, sizeof(struct sockaddr)); 58 rt_kprintf("TCP thread connect error code: %d\n", err); 59 } 60 else if (result == 0) 61 { 62 /* ��ӡsend��������ֵΪ0�ľ�����Ϣ */ 63 rt_kprintf("\n Send warning,send function return 0.\r\n"); 64 } 65 } 66 } 67 68 #ifdef RT_USING_FINSH 69 #include <finsh.h> 70 /* ���tcpclient������finsh shell�� */ 71 FINSH_FUNCTION_EXPORT(tcp_senddata, send a packet through tcp connection); 72 #endif 73 74