资源简介
UDP实现的可靠文件传输的VC++源代码,经典作品,物美价廉,值得收藏,是程序员的必备法宝.
代码片段和文件信息
#ifndef WIN32
#include
#include
#include
#include
#else
#include
#include
#endif
#include
#include
#include “cc.h“
using namespace std;
#ifndef WIN32
void* monitor(void*);
#else
DWORD WINAPI monitor(LPVOID);
#endif
int 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 *local *peer;
memset(&hints 0 sizeof(struct addrinfo));
hints.ai_flags = AI_PASSIVE;
hints.ai_family = AF_INET;
hints.ai_socktype = SOCK_STREAM;
//hints.ai_socktype = SOCK_DGRAM;
if (0 != getaddrinfo(NULL “9000“ &hints &local))
{
cout << “incorrect network address.\n“ << endl;
return 0;
}
UDTSOCKET client = UDT::socket(local->ai_family local->ai_socktype local->ai_protocol);
// UDT Options
//UDT::setsockopt(client 0 UDT_CC new CCCFactory sizeof(CCCFactory));
//UDT::setsockopt(client 0 UDT_MSS new int(9000) sizeof(int));
//UDT::setsockopt(client 0 UDT_SNDBUF new int(10000000) sizeof(int));
//UDT::setsockopt(client 0 UDP_SNDBUF new int(10000000) sizeof(int));
#ifdef WIN32
UDT::setsockopt(client 0 UDT_MSS new int(1052) sizeof(int));
#endif
// for rendezvous connection enable the code below
/*
UDT::setsockopt(client 0 UDT_RENDEZVOUS new bool(true) sizeof(bool));
if (UDT::ERROR == UDT::bind(client local->ai_addr local->ai_addrlen))
{
cout << “bind: “ << UDT::getlasterror().getErrorMessage() << endl;
return 0;
}
*/
freeaddrinfo(local);
if (0 != getaddrinfo(argv[1] argv[2] &hints &peer))
{
cout << “incorrect server/peer address. “ << argv[1] << “:“ << argv[2] << endl;
return 0;
}
// connect to the server implict bind
if (UDT::ERROR == UDT::connect(client peer->ai_addr peer->ai_addrlen))
{
cout << “connect: “ << UDT::getlasterror().getErrorMessage() << endl;
return 0;
}
freeaddrinfo(peer);
// using CC method
//CUDPBlast* cchandle = NULL;
//int temp;
//UDT::getsockopt(client 0 UDT_CC &cchandle &temp);
//if (NULL != cchandle)
// cchandle->setRate(500);
int size = 100000;
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 < 1000000; i ++)
{
int ssize = 0;
int ss;
while (ssize < size)
{
if (UDT::ERROR == (ss = UDT::send(client data + ssize size - ssize 0)))
{
cout << “send:“ << UDT::getlasterror().getErrorMessage() << endl;
break;
}
ssize += ss;
}
if (ssize < size)
break;
}
UDT::close(client);
delete [] data;
return 1;
}
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2008-03-18 20:33 udt4\app\
文件 3828 2007-11-18 17:23 udt4\app\appclient.cpp
文件 23552 2008-03-18 20:32 udt4\app\appclient.exe
文件 3433 2007-11-06 16:32 udt4\app\appserver.cpp
文件 23552 2008-03-18 20:32 udt4\app\appserver.exe
文件 2334 2008-03-18 20:32 udt4\app\BuildLog.htm
文件 1685 2007-08-28 17:23 udt4\app\cc.h
文件 2014 2007-09-08 00:30 udt4\app\recvfile.cpp
文件 19456 2008-03-18 20:32 udt4\app\recvfile.exe
文件 2529 2007-09-08 01:02 udt4\app\sendfile.cpp
文件 19968 2008-03-18 20:32 udt4\app\sendfile.exe
文件 172032 2008-03-18 20:24 udt4\app\udt.dll
目录 0 2008-03-18 20:10 udt4\doc\
目录 0 2008-03-18 20:10 udt4\doc\doc\
文件 3298 2007-06-08 13:43 udt4\doc\doc\accept.htm
文件 3157 2007-06-25 21:56 udt4\doc\doc\bind.htm
文件 5865 2007-07-15 21:31 udt4\doc\doc\ccc.htm
文件 2686 2007-10-02 17:32 udt4\doc\doc\close.htm
文件 4215 2007-10-02 17:31 udt4\doc\doc\connect.htm
文件 2168 2007-10-25 21:43 udt4\doc\doc\copy.htm
文件 4782 2007-09-20 22:58 udt4\doc\doc\ecode.htm
文件 1467 2007-07-15 21:41 udt4\doc\doc\error.htm
文件 9881 2007-12-02 19:37 udt4\doc\doc\faq.htm
文件 563 2007-12-31 23:56 udt4\doc\doc\footer.htm
文件 3134 2007-06-05 10:33 udt4\doc\doc\function.htm
文件 331 2007-06-05 10:33 udt4\doc\doc\header.htm
文件 1893 2007-09-06 20:13 udt4\doc\doc\intro.htm
文件 2583 2007-06-08 13:51 udt4\doc\doc\listen.htm
文件 2721 2007-07-15 11:34 udt4\doc\doc\make.htm
文件 6907 2007-06-25 21:56 udt4\doc\doc\opt.htm
文件 2640 2007-06-08 13:55 udt4\doc\doc\peername.htm
............此处省略84个文件信息
- 上一篇:C语言程序设计,谭浩强,清华大学,完整版
- 下一篇:C++聊天室客户端+服务端
评论
共有 条评论