xref: /nrf52832-nimble/rt-thread/examples/network/tcpsendpacket.c (revision 104654410c56c573564690304ae786df310c91fc)
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