1 #include <rtthread.h>
2
3 #include <netdb.h> /* Ϊ�˽�������������Ҫ����netdb.hͷ�ļ� */
4 #include <sys/socket.h> /* ʹ��BSD socket����Ҫ����socket.hͷ�ļ� */
5
tcp_senddata(const char * url,int port,int length)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