Здраствуйте. Пишу алгоритм передачи файла на другой компьютер. Возможности пока небыло проверить код. Пожалуйста оцените концепцию и по возможности оптимизируйте:
| Код | #define BUFFER_SIZE = 4096;
struct Package { char bufferFile[bufferSize]; char pathFile[255]; int fileSize; }
|
Реализация клиента:
| Код | // File sending using TCP protocol int TransferFile(char *pathFile, int port, char* IP) { Package pack = {0}; pack.fileSize = GetFileSize(pathFile); int piecesCount = pack.fileSize / BUFFER_SIZE; SOCKET hClientSocket = Connect(port, IP); HANDLE hFile = OpenFile(pathFile);
for(int currentBuffer = 0; currentBuffer<piecesCount; currentBuffer++) { pack.bufferFile[bufferSize] = ReadBufferFromFile(hFile, currentBuffer); send(hClientSocket, pack);
|
| Код | // Report about buffer receiving by server // Limit time is 5 seconds for(int timesCount = 0; timesCount<50; timesCount++) { SOCKET hServerSocket = accept(hClientSocket); if(hServerSocket != 0) { if(pack.bufferFile == "Package recived") { pack.bufferFile == ""; closeSocket(hServerSocket); break; } else if(pack.bufferFile == "Package fail") { // don't send any package closeSocket(hServerSocket); socketClose(hClientSocket); fclose(hFile); return -1; } } sleep(100); } break; } socketClose(hClientSocket); fclose(hFile); return 0; }
|
Серверная часть:
| Код | int ReceivingFile() { Package pack = {0}; SOCKET hSocketClient;
while(hSocketClient != 0) hSocketClient = accept(hServerSocket);
recv(hServerSocket, pack);
if(CheckSpaceOnHard(pack.fileSize) != 0) { pack.bufferSize = "Package fail";
// Send report about delivering send(hClientSocket, pack); }
|
| Код | if( pack.bufferFile != 0) { HANDLE hFile = CreateFile(pack.pathFile); int piecesCount = pack.fileSize / BUFFER_SIZE;
for(int currentBuffer = 0; currentBuffer<piecesCount; currentBuffer++) { int error = WriteBufferToFile(hFile, pack.bufferFile); if(error == 0) { pack.bufferSize = "Package recived";
// Send report about delivering send(hClientSocket, pack); } recv(hServerSocket, pack); } } fclose(hFile); return 0; }
|
Заранее спасибо. |