Ok.
My udtsendfile:
#include "stdafx.h"
#include<iostream>
#include<udt.h>
#include<string.h>
#include<fstream>
#include<stdio.h>
using namespace std;
using namespace System;
using namespace System::Text;
int main()
{
UDT::startup();
UDTSOCKET serv = UDT::socket(AF_INET, SOCK_STREAM, 0);
int port = 9000;
sockaddr_in my_addr;
my_addr.sin_family = AF_INET;
my_addr.sin_port = htons(9000);
memset(&(my_addr.sin_zero), '\0', 8);
if (UDT::ERROR == UDT::bind(serv, (sockaddr*)&my_addr, sizeof(my_addr)))
{
cout << "bind: " << UDT::getlasterror().getErrorMessage() << endl;
return 0;
}
cout << "server is ready at port: " << port << endl;
UDT::listen(serv, 10);
sockaddr_in their_addr;
int namelen = sizeof(their_addr);
UDTSOCKET fhandle;
if (UDT::INVALID_SOCK == (fhandle = UDT::accept(serv, (sockaddr*)&their_addr, &namelen)))
{
cout << "accept: " << UDT::getlasterror().getErrorMessage() << endl;
return 0;
}
UDT::close(serv);
char file[1024];
int len;
if (UDT::ERROR == UDT::recv(fhandle, (char*)&len, sizeof(int), 0))
{
cout << "recv: " << UDT::getlasterror().getErrorMessage() << endl;
return 0;
}
if (UDT::ERROR == UDT::recv(fhandle, file, len, 0))
{
cout << "recv: " << UDT::getlasterror().getErrorMessage() << endl;
return 0;
}
file[len] = '\0';
fstream ifs(file, ios::in | ios::binary);
ifs.seekg(0, ios::end);
int64_t size = ifs.tellg();
ifs.seekg(0, ios::beg);
if (UDT::ERROR == UDT::send(fhandle, (char*)&size, sizeof(int64_t), 0))
{
cout << "send: " << UDT::getlasterror().getErrorMessage() << endl;
return 0;
}
UDT::TRACEINFO trace;
UDT::perfmon(fhandle, &trace);
if (UDT::ERROR == UDT::sendfile(fhandle, ifs, 0, size))
{
cout << "sendfile: " << UDT::getlasterror().getErrorMessage() << endl;
return 0;
}
UDT::perfmon(fhandle, &trace);
cout << "speed = " << trace.mbpsSendRate << "Mbits/sec" << endl;
UDT::close(fhandle);
ifs.close();
UDT::cleanup();
return 1;
}
And my receivefile:
#include "stdafx.h"
#include<iostream>
#include<udt.h>
#include<string.h>
#include<fstream>
#include<stdio.h>
using namespace std;
using namespace System;
int main()
{
UDT::startup();
UDTSOCKET fhandle = UDT::socket(AF_INET, SOCK_STREAM, 0);
sockaddr_in serv_addr;
serv_addr.sin_family = AF_INET;
serv_addr.sin_port = htons(9000);
serv_addr.sin_addr.S_un.S_un_b.s_b1=127;
serv_addr.sin_addr.S_un.S_un_b.s_b2=0;
serv_addr.sin_addr.S_un.S_un_b.s_b3=0;
serv_addr.sin_addr.S_un.S_un_b.s_b4=1;
memset(&(serv_addr.sin_zero), '\0', 8);
if (UDT::ERROR == UDT::connect(fhandle, (sockaddr*)&serv_addr, sizeof(serv_addr)))
{
cout << "connect: " << UDT::getlasterror().getErrorMessage() << endl;
return 0;
}
char filepath[]="C:\\t.txt";
int len = strlen(filepath);
if (UDT::ERROR == UDT::send(fhandle, (char*)&len, sizeof(int), 0))
{
cout << "send: " << UDT::getlasterror().getErrorMessage() << endl;
return 0;
}
if (UDT::ERROR == UDT::send(fhandle, filepath, len, 0))
{
cout << "send: " << UDT::getlasterror().getErrorMessage() << endl;
return 0;
}
int64_t size;
if (UDT::ERROR == UDT::recv(fhandle, (char*)&size, sizeof(int64_t), 0))
{
cout << "send: " << UDT::getlasterror().getErrorMessage() << endl;
return 0;
}
char filenamen[]="t.txt";
fstream ofs("t.txt", ios::out | ios::binary | ios::trunc);
int64_t recvsize;
if (UDT::ERROR == (recvsize = UDT::recvfile(fhandle, ofs, 0, size)))
{
cout << "recvfile: " << UDT::getlasterror().getErrorMessage() << endl;
return 0;
}
UDT::close(fhandle);
ofs.close();
UDT::cleanup();
return 1;
}