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