]> git.lizzy.rs Git - rudp.git/blob - rudpselc.c
Switch to CMake
[rudp.git] / rudpselc.c
1 #include "rudp.h"
2 #include "platform_adpt.h"
3 #include <string.h>
4 #include <stdio.h>
5
6 int sendData(RUDPSOCKET s)
7 {
8         char line[3000];
9         int i=0, rlt = 0;
10         memset(line, '1' + i%36, 3000);
11
12         time_t t0, t_prev, t;
13         unsigned long nTotal = 0, nByt = 0;
14         t0 = t_prev = time(NULL);
15         for(i=0; 0<50000; i++)
16         {
17                 PA_IOVEC v[3];
18                 v[0].iov_base = v[1].iov_base = v[2].iov_base = line;
19                 v[0].iov_len = 230;
20                 v[1].iov_len = 1100;
21                 v[2].iov_len = 100;
22
23                 int onesent = v[0].iov_len + v[1].iov_len + v[2].iov_len;
24                 nTotal += onesent;
25                 nByt += onesent;
26                 if( (i % 4) == 0)
27                 {
28                         rlt = RUDPSendV(s, 1, v, 3, 0);
29                 }
30                 else
31                         rlt = RUDPSendV(s, 0/*1*/, v, 3, 0);
32                 if(rlt < 0)
33                 {
34                         printf("RUDPSend error: %d\n", rlt);
35                         break;
36                 }
37
38                 time(&t);
39                 if(t != t_prev)
40                 {
41                         fprintf(stderr, "rate: Avg.: %d B/s, Rt. %dB/s        \r", nTotal/(t-t0), nByt);
42                         fflush(stderr);
43                         t_prev = t;
44                         nByt = 0;
45                 }
46         }
47
48         printf("***************************************\n");
49         if(rlt > 0)
50         {
51                 line[0] = '\0';
52                 RUDPSend(s, 0, line, 1, 0);
53                 printf("all data sent.\n");
54         }
55         return 0;
56 }
57
58 void recvData(RUDPSOCKET a)
59 {
60         int cnt = 0;
61         char line[2100];
62         int len, chno;
63         while( 1 )
64         {
65                 struct timeval tv = { 0, 500000 };
66                 int flag = RUDPSELECT_READABLE, rlt;
67                 if( 1 )//(rlt = RUDPSelectSock(a, -1, flag, &tv)) > 0)
68                 {
69                         if((len = RUDPRecv(a, &chno, line, 2000, 0)) > 0)
70                         {
71                                 if(chno == 0)
72                                 {
73                                         //fprintf(stderr, "Packet %d from chn 0\n", cnt);
74                                 }
75                                 cnt++;
76                                 line[len] = '\0';
77                                 //printf("%s\n", line);
78                                 if(line[0] == '\0') break;
79                         }
80                         else if(len < 0)
81                         {
82                                 fprintf(stderr, "RUDPRecv: %d\n", len);
83                                 exit(-1);
84                         }
85                 } else if(rlt < 0)
86                 {
87                         printf("ERROR: RUDPSelectSock: %d\n", rlt);
88                         exit(-1);
89                 }
90         }
91         printf("receiving finished.\n");
92 }
93 void *threadSend(void *p)
94 {
95         RUDPSOCKET a = (RUDPSOCKET*)p;
96         pthread_detach(pthread_self());
97
98         //recvData(a);
99         sendData(a);
100
101         RUDPClose(a);
102         sleep(5);
103         return NULL;
104 }
105
106 void* threadRecv(void *p)
107 {
108         RUDPSOCKET a = (RUDPSOCKET*)p;
109         pthread_detach(pthread_self());
110
111         recvData(a);
112         //sendData(a);
113
114         RUDPClose(a);
115         sleep(5);
116         return NULL;
117 }
118
119
120 //Usage: rudpclt [-a] [server] [port]
121 //      ------- -a: asynchronous
122 //      ------- server: default is 127.0.0.1, 
123 //      ------- port: 5001 by default
124 #define SERVER_SEND     0x01
125 #define SERVER_RECV     0x02
126 int main(int argc, char *argv[])
127 {
128         struct sockaddr_in sai;
129         int sa_len;
130         int rlt, i, async = 0;
131         RUDPSOCKET s;
132         char cmd = 3;
133
134
135         PA_NetLibInit();
136         RUDPStart();
137        
138         s = RUDPSocket();
139
140         memset(&sai, 0, sizeof(sai));
141         sai.sin_family = AF_INET;
142         sai.sin_addr.s_addr = inet_addr("127.0.0.1");
143         sai.sin_port = htons(5001);
144         sa_len = sizeof(sai);
145
146         for(i=1; i<argc; i++)
147         {
148                 if(strchr(argv[i], '.'))
149                         sai.sin_addr.s_addr = inet_addr(argv[i]);
150                 else
151                         sai.sin_port = htons(atoi(argv[i]));
152         }
153
154         int opt;
155         //opt = 256; RUDPSetSockOpt(s, OPT_RUDP_RCVBUF, &opt, sizeof(int));
156         if( (rlt = RUDPConnect(s, (struct sockaddr*)&sai, sizeof(sai))) == 0)
157         {
158                 char line[1024];
159                 int chn=0;
160                 while(fgets(line, 1024, stdin))
161                 {
162                         if(strncmp(line, "quit", 4) == 0) break;
163                         RUDPSend(s, chn, line, strlen(line)+1, 0);
164                         chn = !chn;
165                 }
166         }
167
168         if(s) RUDPClose(s);
169
170         sleep(4);
171         RUDPCleanup();
172
173         return 0;
174 }