⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 appclient.cpp

📁 udt的一个源代码
💻 CPP
字号:
#ifndef WIN32#include <unistd.h>#include <cstdlib>#include <cstring>#include <netdb.h>#else#include <winsock2.h>#include <Ws2tcpip.h>#endif#include <iostream>#include <udt.h>//#include "cc.h"using namespace std;void DeleteBuf(char* buf, int) {delete [] buf;}#ifndef WIN32void* monitor(void*);#elseDWORD WINAPI monitor(LPVOID);#endifint main(int argc, char* argv[]){   if ((3 != argc) || (0 == atoi(argv[2])))   {      cout << "usage: appclient server_ip server_port" << endl;      return 0;   }   struct addrinfo hints, *res;   memset(&hints, 0, sizeof(struct addrinfo));   hints.ai_family = AF_INET;   hints.ai_socktype = SOCK_STREAM;   //hints.ai_socktype = SOCK_DGRAM;   if (0 != getaddrinfo(argv[1], argv[2], &hints, &res))   {      cout << "incorrect network address.\n" << endl;      return 0;   }   UDTSOCKET client = UDT::socket(res->ai_family, res->ai_socktype, res->ai_protocol);   // UDT Options   //UDT::setsockopt(client, 0, UDT_CC, new CCCFactory<CUDPBlast>, sizeof(CCCFactory<CUDPBlast>));   //UDT::setsockopt(client, 0, UDT_MSS, new int(7500), sizeof(int));   //UDT::setsockopt(client, 0, UDT_SNDBUF, new int(200000000), sizeof(int));   //UDT::setsockopt(client, 0, UDP_SNDBUF, new int(100000000), sizeof(int));#ifdef WIN32   UDT::setsockopt(client, 0, UDT_MSS, new int(1052), sizeof(int));#endif   // connect to the server, implict bind   if (UDT::ERROR == UDT::connect(client, res->ai_addr, res->ai_addrlen))   {      cout << "connect: " << UDT::getlasterror().getErrorMessage() << endl;      return 0;   }   freeaddrinfo(res);   // using CC method   //CUDPBlast* cchandle = NULL;   //int temp;   //UDT::getsockopt(client, 0, UDT_CC, &cchandle, &temp);   //if (NULL != cchandle)   //   cchandle->setRate(500);   int size = 10000000;   int handle = 0;   char* data = new char[size];#ifndef WIN32   pthread_create(new pthread_t, NULL, monitor, &client);#else   CreateThread(NULL, 0, monitor, &client, 0, NULL);#endif   for (int i = 0; i < 1000; i ++)   {      if (UDT::ERROR == UDT::send(client, data, size, 0, &handle))      //if (UDT::ERROR == UDT::sendmsg(client, data, size))      {         cout << "send: " << UDT::getlasterror().getErrorMessage() << endl;         return 0;      }   }   UDT::close(client);   delete [] data;   return 1;}#ifndef WIN32void* monitor(void* s)#elseDWORD WINAPI monitor(LPVOID s)#endif{   UDTSOCKET u = *(UDTSOCKET*)s;   UDT::TRACEINFO perf;   cout << "SendRate(Mb/s) RTT(ms) FlowWindow PktSndPeriod(us) RecvACK RecvNAK" << endl;   while (true)   {#ifndef WIN32      sleep(1);#else      Sleep(1000);#endif      if (UDT::ERROR == UDT::perfmon(u, &perf))      {         cout << "perfmon: " << UDT::getlasterror().getErrorMessage() << endl;         break;      }      cout << perf.mbpsSendRate << "\t"            << perf.msRTT << "\t"            << perf.pktFlowWindow << "\t"            << perf.usPktSndPeriod << "\t"            << perf.pktRecvACK << "\t"            << perf.pktRecvNAK << endl;   }#ifndef WIN32   return NULL;#else   return 0;#endif}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -