据悉RTKLIB构建高并发通信测试工具

1、 RTKLIB基础动态库生成

RTKLIB是天下导航卫星系统GNSS(global navigation satellite system)的标准&精密定位开源程序包,由日本首都外贸大学的高须知二开支。在博文《RTKLIB编译及RTCM数据读取样例》中,笔者详细介绍了RTKLIB基础库的编译方法及注意细节,并交由了RTCM数据读取的DEMO,读者可适用参考。

2、 基于RTKLIB构建高并发通信测试工具DEMO

在RTKLIB动态库的底蕴上,笔者使用其稳定的数量通信功用,尝试举行了高并发通信测试工具的编译工作,模拟了500个NtripClient客户端并发测试,样例代码如下所示。

4166澳门金沙网娱乐 14166澳门金沙网娱乐 2

 1 void strsvr(int i)
 2 {
 3        strsvr_t *svr = (strsvr_t *)malloc(sizeof(strsvr_t));
 4  
 5        int opt[8] = { 10000, 10000, 1000, 32768, 10, 1000, 30, 0 };
 6        int strs[1] = { STR_NTRIPCLI };
 7        double nemapos[3] = { 0 };
 8        char *path[1];
 9        for (int i = 0; i < 1; i++)
10               path[i] = malloc(sizeof(char) * 1024);
11        path[0] = "a:a@127.0.0.1:10001/RTCM ";   
12        char cmd[4][1024] = { 0 };
13        char cmds_p[4][1024] = { 0 };
14        strconv_t *conv[4] = { 0 };
15        strsvrinit(svr, 0);
16        strsvrstart(svr, opt, strs, &path, conv, cmd, cmds_p, nemapos);
17  
18        while (1)
19        {             
20               trace(0, "thread:%d,tick:%d,rec:%d,cnt:%d\n", i, svr->stream[0].tick_i,svr->stream[0].inb, svr->stream[0].tickcnt);
21               sleepms(30000);
22        }      
23 }
24 extern int ThreadStart(LPTHREAD_START_ROUTINE t, LPVOID p)
25 {
26        DWORD dwReceiveGpsDataThreadID; 
27        HANDLE  hReceiveDataThread;
28        if (!(hReceiveDataThread = CreateThread(NULL,0,t,p,0,   &dwReceiveGpsDataThreadID)))
29        {
30               CloseHandle(hReceiveDataThread);
31               return 0;
32        }
33        return 1;
34 }
35 int main(char argv)
36 {      
37        traceopen("log.txt");
38        tracelevel(1);
39        for (int i = 0; i < 500; i++)
40        {
41               ThreadStart((LPTHREAD_START_ROUTINE)strsvr1, (LPVOID)i); Sleep(5);
42        }      
43        getchar();
44        traceclose();
45        return 0;
46 }

View Code

4166澳门金沙网娱乐,中间,strsvr函数是出新测试的根基函数,负责完成多少通信效用和日志记录效能;ThreadStart函数是开创线程的函数,用于成立线程,t为格局指针,p为参数指针。

值得注意的的是RTKLIB中,不同通信协议和格局的通信路径path参数的格式具有特定的要求,具体内容可参考stropen函数的笺注,如下所示。

4166澳门金沙网娱乐 34166澳门金沙网娱乐 4

  1 /* open stream -----------------------------------------------------------------
  2 *
  3 * open stream to read or write data from or to virtual devices.
  4 *
  5 * args   : stream_t *stream IO  stream
  6 *          int type         I   stream type
  7 *                                 STR_SERIAL   = serial device
  8 *                                 STR_FILE     = file (record and playback)
  9 *                                 STR_TCPSVR   = TCP server
 10 *                                 STR_TCPCLI   = TCP client
 11 *                                 STR_NTRIPSVR = NTRIP server
 12 *                                 STR_NTRIPCLI = NTRIP client
 13 *                                 STR_NTRIPC_S = NTRIP caster server
 14 *                                 STR_NTRIPC_C = NTRIP caster client
 15 *                                 STR_UDPSVR   = UDP server (read only)
 16 *                                 STR_UDPCLI   = UDP client (write only)
 17 *                                 STR_MEMBUF   = memory buffer (FIFO)
 18 *                                 STR_FTP      = download by FTP (raed only)
 19 *                                 STR_HTTP     = download by HTTP (raed only)
 20 *          int mode         I   stream mode (STR_MODE_???)
 21 *                                 STR_MODE_R   = read only
 22 *                                 STR_MODE_W   = write only
 23 *                                 STR_MODE_RW  = read and write
 24 *          char *path       I   stream path (see below)
 25 *
 26 * return : status (0:error,1:ok)
 27 *
 28 * notes  : see reference [1] for NTRIP
 29 *          STR_FTP/HTTP needs "wget" in command search paths
 30 *
 31 * stream path ([] options):
 32 *
 33 *   STR_SERIAL   port[:brate[:bsize[:parity[:stopb[:fctr[#port]]]]]]
 34 *                    port  = COM??  (windows)
 35 *                            tty??? (linuex, omit /dev/)
 36 *                    brate = bit rate     (bps)
 37 *                    bsize = bit size     (7|8)
 38 *                    parity= parity       (n|o|e)
 39 *                    stopb = stop bits    (1|2)
 40 *                    fctr  = flow control (off|rts)
 41 *                    port  = tcp server port to output received stream
 42 *
 43 *   STR_FILE     path[::T][::+start][::xseppd][::S=swap][::P={4|8}]
 44 *                    path  = file path
 45 *                            (can include keywords defined by )
 46 *                    ::T   = enable time tag
 47 *                    start = replay start offset (s)
 48 *                    speed = replay speed factor
 49 *                    swap  = output swap interval (hr) (0: no swap)
 50 *                    ::P={4|8} = file pointer size (4:32bit,8:64bit)
 51 *
 52 *   STR_TCPSVR   :port
 53 *                    port  = TCP server port to accept
 54 *
 55 *   STR_TCPCLI   addr:port
 56 *                    addr  = TCP server address to connect
 57 *                    port  = TCP server port to connect
 58 *
 59 *   STR_NTRIPSVR [:passwd@]addr[:port]/mponit[:string]
 60 *                    addr  = NTRIP caster address to connect
 61 *                    port  = NTRIP caster server port to connect
 62 *                    passwd= NTRIP caster server password to connect
 63 *                    mpoint= NTRIP mountpoint
 64 *                    string= NTRIP server string
 65 *
 66 *   STR_NTRIPCLI [user[:passwd]@]addr[:port]/mpoint
 67 *                    addr  = NTRIP caster address to connect
 68 *                    port  = NTRIP caster client port to connect
 69 *                    user  = NTRIP caster client user to connect
 70 *                    passwd= NTRIP caster client password to connect
 71 *                    mpoint= NTRIP mountpoint
 72 *
 73 *   STR_NTRIPC_S [:passwd@][:port]/mpoint
 74 *                    port  = NTRIP caster server port to accept
 75 *                    passwd= NTRIP caster server password to accept
 76 *                    mpoint= NTRIP mountpoint
 77 *
 78 *   STR_NTRIPC_C [user[:passwd]@][:port]/mpoint
 79 *                    port  = NTRIP caster client port to accept
 80 *                    user  = NTRIP caster client user to accept
 81 *                    passwd= NTRIP caster client password to accept
 82 *                    mpoint= NTRIP mountpoint
 83 *
 84 *   STR_UDPSVR   :port
 85 *                    port  = UDP server port to receive
 86 *
 87 *   STR_UDPCLI   addr:port
 88 *                    addr  = UDP server or broadcast address to send
 89 *                    port  = UDP server or broadcast port to send
 90 *
 91 *   STR_MEMBUF   [size]
 92 *                    size  = FIFO size (bytes) ("":4096)
 93 *
 94 *   STR_FTP      [user[:passwd]@]addr/path[::T=poff[,tint[,toff,tret]]]]
 95 *                    user  = FTP server user
 96 *                    passwd= FTP server password
 97 *                    addr  = FTP server address
 98 *                    path  = FTP server file path
 99 *                    poff  = time offset for path extension (s)
100 *                    tint  = download interval (s)
101 *                    toff  = download time offset (s)
102 *                    tret  = download retry interval (s) (0:no retry)
103 *
104 *   STR_HTTP     addr/path[::T=poff[,tint[,toff,tret]]]]
105 *                    addr  = HTTP server address
106 *                    path  = HTTP server file path
107 *                    poff  = time offset for path extension (s)
108 *                    tint  = download interval (s)
109 *                    toff  = download time offset (s)
110 *                    tret  = download retry interval (s) (0:no retry)
111 *
112 *-----------------------------------------------------------------------------*/

View Code