From ddac76d3f528debac7ffea90b57902eef5d66f99 Mon Sep 17 00:00:00 2001 From: bfsc19 <bfsc19@inf.ufpr.br> Date: Sun, 26 Feb 2023 05:10:05 -0300 Subject: [PATCH] bugs: tentando adicionar envio e recebimento de arquivos --- headers/client.h | 110 +++++++++++++++++++++++++------------------ headers/server.h | 120 +++++++++++++++++++++++++++++++++++------------ saida.txt | Bin 0 -> 29362 bytes teste | Bin 33352 -> 0 bytes texto.txt | 37 +++++++++++++++ 5 files changed, 192 insertions(+), 75 deletions(-) create mode 100644 saida.txt delete mode 100755 teste create mode 100644 texto.txt diff --git a/headers/client.h b/headers/client.h index 0c81bf3..3523ef1 100644 --- a/headers/client.h +++ b/headers/client.h @@ -51,6 +51,7 @@ private: bool verify_ack(frame *received, frame *sent); frame *receive_ack(frame *f); vector<frame *> create_frames(vector<char> data, int type); + vector<frame *> create_frames_midia(vector<char> data); int send_frame_socket(frame *f); int start_transmission(); int end_transmission(); @@ -62,7 +63,7 @@ public: string userInput; // ------- Construtores ------ // - client(conexao *socketAddr) { socket = socketAddr; }; + client(conexao *socketAddr) { socket = socketAddr; } // ---------- Funcoes -------- // void run(); @@ -145,6 +146,8 @@ int client::end_transmission() { * @return int */ int client::send_frames(vector<frame *> frames) { + if (frames.empty()) { return 0; } + if (!start_transmission()) { return 0; } // Envia um frame por vez @@ -190,7 +193,16 @@ int client::send_message(vector<char> data, int type) { int messageSize = data.size(); vector<frame *> frames; - frames = create_frames(data, type); + + switch (type) { + case TEXTO: + frames = create_frames(data, type); + break; + + case MIDIA: + frames = create_frames_midia(data); + break; + } return send_frames(frames); } @@ -207,15 +219,12 @@ string client::calc_file_size(string fileName) { } vector<char> client::read_file(string fileName) { - fstream file; + ifstream file; file.open(fileName, ios::binary); - string teste; vector<char> fileData; - char c; - while ((file.get(c), file.eof() == false)) { - fileData.push_back(c); - } + for (char c; (file.read(&c, 1), file.eof()) == false; fileData.push_back(c)) + ; file.close(); return fileData; @@ -226,49 +235,23 @@ vector<char> client::read_file(string fileName) { * */ void client::send_file() { + vector<char> fileNameVector; string fileName; + do { - cout << "Digite o nome do arquivo(maximo de " << TAM_DADOS - 4 << " char):\n"; + cout << "Digite o nome do arquivo(maximo de " << TAM_DADOS + << " char):\n"; getline(cin, fileName); - } while (fileName.size() > TAM_DADOS - 4); + } while (fileName.size() > TAM_DADOS); - // Envia o primeiro frame com o tamanho do arquivo - string fileSize = calc_file_size(fileName); - if (fileSize.empty()) { return; } + fileNameVector.insert(fileNameVector.begin(), fileName.begin(), + fileName.end()); - cout << "Tamanho do arquivo: " << fileSize << "\n"; - cout << "Enviando tamanho do arquivo\n"; - if (!send_message(vector<char>(fileSize.begin(), fileSize.end()), MIDIA)) { - cout << "Limite de timout, arquivo nao foi enviado\n"; + if (!send_message(fileNameVector, MIDIA)) { + cout << "Falha ao enviar o arquivo\n"; return; } - // Envia o segundo frame com o nome do arquivo - cout << "Enviando nome do arquivo\n"; - string name = "NAME"; - vector<char>fileNameVector(name.begin(), name.end()); - fileNameVector.insert(fileNameVector.end(), fileName.begin(), fileName.end()); - - if (!send_message(fileNameVector, MIDIA)) - { - cout << "Limite de timout, arquivo nao foi enviado\n"; - return; - } - - cout << "Enviando arquivo\n"; - vector<char> file = read_file(fileName); - if ( file.empty() ) - { - cout << "Falha ao abrir o arquivo para leitura. Abortado\n"; - return; - } - - if (!send_message(file, DADOS)) - { - cout << "Limite de timout, arquivo nao foi enviado\n"; - return; - } - cout << "Arquivo enviado com sucesso\n"; } @@ -289,6 +272,43 @@ void client::send_text(string message) { cout << "Mensagem enviada com sucesso\n"; } +vector<frame *> client::create_frames_midia(vector<char> vectorName) { + vector<frame *> framesToSend; + vector<frame *> framesAux; + + // Cria um vetor com o tamanho do arquivo + vector<char> vectorTam; + string fileName = string(vectorName.begin(), vectorName.end()); + string fileSize = calc_file_size(fileName); + if (fileSize.empty()) { return vector<frame *>(); } + vectorTam.insert(vectorTam.begin(), fileSize.begin(), fileSize.end()); + + // Adiciona o tamanho no primeiro frame a ser enviado + framesAux = create_frames(vectorTam, MIDIA); + framesToSend.insert(framesToSend.end(), framesAux.begin(), framesAux.end()); + + // Adiciona o nome no segundo frame a ser enviado + framesAux = create_frames(vectorName, MIDIA); + framesToSend.insert(framesToSend.end(), framesAux.begin(), framesAux.end()); + + // Cria um vetor com os dados do arquivo + vector<char> vectorData = read_file(fileName); + if (vectorData.empty()) { + cout << "Falha ao abrir o arquivo para leitura\n"; + return vector<frame *>(); + } + + // Adiciona os dados do arquivo + framesAux = create_frames(vectorData, DADOS); + framesToSend.insert(framesToSend.end(), framesAux.begin(), framesAux.end()); + + // Arruma a sequencia dos frames + for (int i = 0; i < framesToSend.size(); i++) + framesToSend[i]->set_seq(i%16); + + return framesToSend; +} + /** * @brief Creates a vector with all the frames to be sent * @@ -337,8 +357,8 @@ void client::print_help() { cout << "Comandos disponiveis:\n"; cout << "help ou -h ou h ou HELP ou Help ou H ou ajuda ou Ajuda ou AJUDA\n"; cout << "exit ou -e ou e ou EXIT ou Exit ou E ou sair ou Sair ou SAIR\n"; - cout - << "send ou -s ou s ou SEND ou Send ou S ou enviar ou Enviar ou ENVIAR\n"; + cout << "send ou -s ou s ou SEND ou Send ou S ou enviar ou Enviar ou " + "ENVIAR\n"; cout << "para enviar uma mensagem, digite a mensagem e pressione enter\n"; } diff --git a/headers/server.h b/headers/server.h index 691cf5f..1316bea 100644 --- a/headers/server.h +++ b/headers/server.h @@ -52,6 +52,8 @@ private: bool create_received_dir(); string receive_file_name(); int receive_file_data(string fileName); + bool verify_crc8(frame *f); + bool verify_seq(int seq, int lastSeq); public: // ------- Construtores ------ // @@ -140,12 +142,33 @@ unsigned long server::chk_available_size() { // Recebe o frame com o tamanho do arquivo int server::receive_file_size(frame *f) { - if ( !strncmp(f->get_dado(), "NAME", 4)) { return 0; } + + /* + > verifica a sequencia do frame e o tipo + > se o frame nao for a sequencia esperada, envia um ack(0) e espera receber + a sequencia esperada > se o frame for o esperado, verifica o crc8 > se o + crc estiver certo, envia um ack e continua > se estiver errado, envia um + nack e espera receber o proximo frame + */ + do { + while (f->get_seq() != 1 && f->get_tipo() != MIDIA) { + f->set_seq(0); + send_ack(f); + f = receive_frame_socket(); + if (!f) { return 0; } + } + + if (verify_crc8(f)) { break; } + + // Se o ack nao estiver certo, espera receber o proximo frame + f = receive_frame_socket(); + if (!f) { return 0; } + } while (true); unsigned long availSize = chk_available_size(); if (availSize == -1) { return -1; } - cout << "frame file size:" << f->get_dado() << "\n"; + cout << "Frame file size:" << f->get_dado() << "\n"; int fileSize = stoi(f->get_dado()); if (fileSize > availSize * 0.9) { @@ -179,32 +202,50 @@ bool server::create_received_dir() { string server::receive_file_name() { frame *fReceive; - int lastSeq = -1; // Aguarda receber um frame do tipo midia com o nome do arquivo + // E com a sequencia de numero 2 + /* + > recebe o frame e verifica se o tipo e a sequencia estao corretos + > se estiverem, verifica o crc8 + > se estiver correto, envia um ack e continua + > se estiver errado, envia um nack e espera receber o proximo frame + */ do { - if (!receive_valid_frame(&fReceive)) { return string {}; } - if (fReceive->get_tipo() != MIDIA) { continue; } - if (strncmp(fReceive->get_dado(), "NAME", 4)) { continue; } + do { + fReceive = receive_frame_socket(); + if (!fReceive) { return string{}; } + + if (fReceive->get_tipo() != MIDIA) { continue; } + fReceive->set_seq(1); + send_ack(fReceive); + + } while (fReceive->get_seq() != 2); + if (verify_crc8(fReceive)) { break; } - if (fReceive->get_seq() == lastSeq) { continue; } - lastSeq = fReceive->get_seq(); + fReceive = receive_frame_socket(); + if (!fReceive) { return string{}; } - } while (fReceive->get_tipo() != FIMT); + } while (true); - cout << "Nome do arquivo recebido com sucesso\n"; - cout << "Nome do arquivo: " << fReceive->get_dado()+4 << "\n"; + cout << "Nome do arquivo: " << fReceive->get_dado() << "\n"; - return string(fReceive->get_dado()+4); + return string(fReceive->get_dado()); } -int server::receive_file_data(string fileName) { +bool server::verify_seq(int seq, int lastSeq) { + if (lastSeq == 15 && seq != 0) { return false; } + if (seq != lastSeq + 1) { return false; } + return true; +} +int server::receive_file_data(string fileName) { + cout << "\tRecebendo dados arquivo\n"; // Abre o arquivo para escrita ofstream file; - file.open(FILE_DESTINATION+"/"+fileName); + file.open(fileName, ios::binary); if (!file.is_open()) { cout << "Falha ao criar o arquivo. Abortado\n"; return 0; @@ -212,30 +253,45 @@ int server::receive_file_data(string fileName) { cout << "Arquivo criado com sucesso\n"; - int lastSeq = -1; + int lastSeq = 2; frame *f; do { - if (!receive_valid_frame(&f)) { return 0; } - if (f->get_tipo() != DADOS) { continue; } - if (f->get_seq() == lastSeq) { continue; } + // Fica tentando receber um frame + f = receive_frame_socket(); + if (f == NULL) { return 0; } + + if (f->get_tipo() == FIMT) { break; } + + if (f->get_tipo() != DADOS) { continue; } + + // Recebeu um frame com uma sequencia errada + if (!verify_seq(f->get_seq(), lastSeq)) { + f->set_seq(lastSeq); + send_ack(f); + continue; + } + + if (!verify_crc8(f)) { continue; } lastSeq = f->get_seq(); file.write(f->get_dado(), f->get_tam()); - } while (f->get_tipo() != FIMT); + + } while (true); cout << "Arquivo recebido com sucesso\n"; + file.close(); return 1; } void server::receive_midia(frame *f) { if (!create_received_dir()) { return; } - if (!receive_file_size(f)) { return; } + if (!receive_file_size(f)) { return; } string fileName = receive_file_name(); - if (fileName.size() == 0) { return; } + if (fileName.size() == 0) { return; } receive_file_data(fileName); } @@ -258,23 +314,27 @@ frame *server::receive_frame_socket() { return fReceive; } +bool server::verify_crc8(frame *f) { + int crc8 = f->chk_crc8(); + if (!crc8) { + send_nack(f); + } + else + send_ack(f); + return crc8; +} + int server::receive_valid_frame(frame **f) { - int crc8; do { // Se nao conseguir receber o frame, mata a comunicacao *f = receive_frame_socket(); if (*f == NULL) { return 0; } + cout << "Frame recebido loop\n"; + (*f)->imprime(HEX); // Avisa o cliente se nao conseguiu receber o frame - crc8 = (*f)->chk_crc8(); - if (crc8) { - send_ack(*f); - break; - } - send_nack(*f); - } while (!crc8); - + } while (!verify_crc8(*f)); return 1; } diff --git a/saida.txt b/saida.txt new file mode 100644 index 0000000000000000000000000000000000000000..1a56033fe38d2af10a0efb1223f107d4b1601fa8 GIT binary patch literal 29362 zcmZ=sEz3+!wNl8*=RyZ=MTxno3Pq{OsY#hB`Bq#Co_U#83I-MCu3RCR1^FPRp$nHn zaB3llX~3lrl9&r(8FINKrhuglpezP1=b~f_kemTmacW+Qf}ydAm4bPyLZX6+g25<M zFi_xfboN$A%`3}HOv&fsLJfL_oc#QP(cq_LLLn>o9Y+&Cb>f7q&^I)|8~nzwV#p9) z_&B?amOj`c3?%|wGK*46@{2O_6|xc)QY$ixOH#Sgz;!`dW=^U?ab{Jjl_8gFaY15o zzCv+nT4r))YF<gILTau;N@j5~3B}iF3{tJ`Ly19R>yOa_j7s58R_MFoEx$(FPDIBI zO6dFL=cX#8<SQf=6_#d}<-^;r3d#Ao3dN<#sl~<lTxg1{6wsSoSX;ZKM;Ka0#A+(( znQ-7t9c}MpuRlo_MM<-05jxu5Cpzns9`Fzy<OM&r_KFL%k84n2;;LX!VPXg(TtI{= zsIP3IU{GNOW?8_wZVCn!Mj*xJAX#&W1k@NmM_<>H)QXaPy^@L&c+1tuY_#PHi8yo; zB_gr4T+#9t)*={dSAt#<ON;|)Q%BIIKBJAPv<U&)m^xZZqUTa_`6#&?Eu)Oql7q9B z#6Ki#1{;=1gja6H=A)Gx_6$N+@*fR<s^tr^!k_dyWpqjeYmAW<`lPo$Mniuz^s$Bj z_A;41qGYB0(UONs@i-d#^hxE|Z5a)H?BPNm(b3SSPdH<@Wi<4$hYNi~M?;@J;f&pu z(a^^pF7y!{4So8AGj>}>Lmzv%&_{GM^yw4M*ligNeeB^vAJNg!r%yOzw`DZ+v4;zN zL`OrPKH-ermeJ719xn6|9Swc@gfn(qMnfNaxX?#*H1z2c&e&}k4Snq4LLbr5(5Fv0 zW4C2A^s$EveMCn?pFZJ?-ImeN#~v>95giSE`h+ufTSh}4d$`a?bTsto6VBLe84Z2x z;X)tL(a@()IAgbEH1x5D3w=aKL!Un3jNO*e(8nGw^bs8mefoqmc3Vb6AA7jaM|3pw z=@ZV_Z5a)H?BPNm(b3SSPdH<@Wi<4$hYNi~M?;@J;f&pu(a^^pF7y!{4So8AGj>}> zLmzv%&_{GM^yw4M*ligNeeB^vAJNg!r%yOzw`DZ+v4;zNL`OrPKH-ermeJ719xn6| z9Swc@gfn(qMnfNaxX?#*H1z2c&e&}k4Snq4LLbr5(5Fv0W4C2A^s$EveMCn?pFZJ? f-ImeN#~v>95giSE`h+ufTSh}4d$`a?6eaWladM+~ literal 0 HcmV?d00001 diff --git a/teste b/teste deleted file mode 100755 index 8b98f312be08825cee66554aeaa895ef0fff3670..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 33352 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 diff --git a/texto.txt b/texto.txt new file mode 100644 index 0000000..4ae3093 --- /dev/null +++ b/texto.txt @@ -0,0 +1,37 @@ + + + //string fileSize = calc_file_size(fileName); + //if (fileSize.empty()) { return; } + //franesFile.insert(framesFile.end(), fileSize.begin(), fileSize.end()); + + //cout << "Tamanho do arquivo: " << fileSize << "\n"; + //cout << "Enviando tamanho do arquivo\n"; + //if (!send_message(vector<char>(fileSize.begin(), fileSize.end()), MIDIA)) { + // cout << "Limite de timout, arquivo nao foi enviado\n"; + // return; + //} + + // Envia o segundo frame com o nome do arquivo + //cout << "Enviando nome do arquivo\n"; + //string name = "NAME"; + //vector<char> fileNameVector(name.begin(), name.end()); + //fileNameVector.insert(fileNameVector.end(), fileName.begin(), fileName.end()); + + //if (!send_message(fileNameVector, MIDIA)) { + // cout << "Limite de timout, arquivo nao foi enviado\n"; + // return; + //} + + //cout << "Enviando arquivo\n"; + //vector<char> file = read_file(fileName); + //if ( file.empty()) + //{ + // cout << "Falha ao abrir o arquivo para leitura\n"; + // return; + //} + + //if (!send_message(file, DADOS)) { + // cout << "Limite de timout, arquivo nao foi enviado\n"; + // return; + //} + -- GitLab