Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
23
Добавлен:
11.05.2015
Размер:
2.83 Кб
Скачать
// TFTPClient.cpp : implementation file
//

#include "stdafx.h"
#include "UDPClient.h"
#include "TFTPClient.h"


// CTFTPClient
//-----------------------------------------------
CTFTPClient::CTFTPClient()
{
	m_ServerPort=69;
	m_State=tftpClear;
}
//-----------------------------------------------
CTFTPClient::~CTFTPClient()
{
}
//-----------------------------------------------
BOOL CTFTPClient::InitInstance(void)
{
	BOOL Res=FALSE;
	if(Create(0,SOCK_DGRAM))
	{
		Res=Connect(CString(m_ServerAddress.c_str()),m_ServerPort);
	}
	return Res;
}
//-----------------------------------------------
int CTFTPClient::ExitInstance(void)
{
	return 0;
}
//-----------------------------------------------
void CTFTPClient::SetServer(const string& _Address,UINT _Port)
{
	if(m_State==tftpClear)
	{
		m_ServerAddress=_Address;
		m_ServerPort=_Port;
	}
	else
	{
		//Нельзя изменять адрес сервера
	}
}
//-----------------------------------------------
bool CTFTPClient::GetFile(const string& _RemoteName,const string& _LocalName)
{
	char OutBuf[100];
	int Offset=0;

	//OpCode
	OutBuf[0]=0;
	OutBuf[1]=1;
	Offset+=2;
	//Filename
	memcpy(OutBuf+Offset,_RemoteName.c_str(),_RemoteName.length()+1);
	Offset+=(int)_RemoteName.length()+1;
	//Mode
	memcpy(OutBuf+Offset,"octet",6);
	Offset+=6;

/*	//Transfer size
	memcpy(OutBuf+Offset,"tsize",6);
	Offset+=6;
	memcpy(OutBuf+Offset,"0",2);
	Offset+=2;

	/*	//Block size
	memcpy(OutBuf+Offset,"blksize",8);
	Offset+=8;
	memcpy(OutBuf+Offset,"1024",5);
	Offset+=5;
	//Timeout
	memcpy(OutBuf+Offset,"timeout",8);
	Offset+=8;
	memcpy(OutBuf+Offset,"5",2);
	Offset+=2;*/


	if(Send(OutBuf,Offset)==Offset)
	{
		m_State=tftpGetFile;
		cout << "##Receive file query sended" << endl;	
		return true;
	}
	else
	{
		cout << "##Couldn't send receive file query. Error code:" << GetLastError() << endl;
		return false;
	}
}
//-----------------------------------------------
bool CTFTPClient::PutFile(const string& _LocalName,const string& _RemoteName)
{
//	WSANOTINITIALISED
	return false;
}
//-----------------------------------------------
void CTFTPClient::OnReceive(int nErrorCode)
{
	if(m_State==tftpGetFile)
	{
		char InBuf[10000];
		int InLen;

		InLen=Receive(InBuf,10000);
		if(InLen==SOCKET_ERROR || InLen==0)
		{
			cout << "##Error while receive" << endl;
		}
		else
		{
			cout << "##Received packet" << endl;

			int OpCode=InBuf[1];
			if(OpCode==5)//Error
			{
				int ErrCode=*((__int16*)InBuf+1);
				cout << "Error " << ErrCode << ": " << InBuf+4 << endl;
			}
			else if(OpCode==3)//Data
			{
			}
		}
	}
	else if(m_State==tftpPutFile)
	{
	}
	else
	{
		cout << "##Unexpected data from server" << endl;
	}
}
//-----------------------------------------------
Соседние файлы в папке UDPClient