diff --git a/Protocol.cpp b/Protocol.cpp
index a376c73336a13a4dc479d8466ee5c888ee8af098..7d37b7a178130416fa925af6d3808beed1d18cd6 100644
--- a/Protocol.cpp
+++ b/Protocol.cpp
@@ -113,11 +113,11 @@ int Protocol::recvMessage(int sockt){
     return (int)msg.type.to_ulong();
 }
 
-void Protocol::transmit(int sockt, int window){
+void Protocol::transmit(int sockt, int window, bool dataEndable){
     int status;
     vector<FrameItem> frame;
     int lastFramed = -1;
-    setData(vector<BYTE>(1, 0), ENDTX);
+    if(dataEndable) setData(vector<BYTE>(1, 0), ENDTX);
     int messagesLeft = messages.size();
     Protocol response;
     while(messagesLeft > 0){
@@ -171,9 +171,6 @@ void Protocol::transmit(int sockt, int window){
         }
     }
     reset();
-    vector<BYTE> val(1,(BYTE)0);
-    setData(val, ENDTX);
-    sendMessage(sockt,0);
 }
 
 int Protocol::receive(int sockt, int type, int window, bool dataEndable){
@@ -190,7 +187,7 @@ int Protocol::receive(int sockt, int type, int window, bool dataEndable){
         }
         status = recvMessage(sockt);
         cout << "receive status:" << status << endl;
-        cout << "sequence: "<<messages.back().sequence.to_ulong()<<" next: "<<nextSequence<<endl;
+        // cout << "sequence: "<<messages.back().sequence.to_ulong()<<" next: "<<nextSequence<<endl;
         if(status == NOISE){
             continue;
         } else if(status == type) {
@@ -219,6 +216,7 @@ int Protocol::receive(int sockt, int type, int window, bool dataEndable){
         vector<BYTE> val(1,(BYTE)messages.back().sequence.to_ulong());
         response.setData(val, ACK);
         response.sendMessages(sockt);
+        messages.pop_back();
     }
     return 0;
 }
diff --git a/Protocol.h b/Protocol.h
index 76bf29b8a5d5669d5fd711e425d69eb6a8c95ebe..242722417ae046ba3d55a62eb8fa15ecc72af0f8 100644
--- a/Protocol.h
+++ b/Protocol.h
@@ -18,7 +18,7 @@ public:
     string getDataAsString();
     int recvMessage(int sockt);
     void addMessage(Message msg);
-    void transmit(int sockt, int window);
+    void transmit(int sockt, int window, bool dataEndable);
     int receive(int sockt, int type, int window, bool dataEndable);
     void reset();
 
diff --git a/client.cpp b/client.cpp
index c5f3b508688677ebd019ead849cc3f4239089429..cf6fcaabaaf54b7b784a0027d73b017c71c5ab36 100644
--- a/client.cpp
+++ b/client.cpp
@@ -65,13 +65,34 @@ int main(){
                 } else {
                     cout << "ERROR: arquivo não existe\n";
                 }
+                sendProtocol.reset();
+                receiveProtocol.reset();
             }else if(command == "get"){
                 args = line.substr(pos+1, line.size());
                 sendProtocol.setData(vector<BYTE>(args.begin(), args.end()), GET);
                 sendProtocol.sendMessage(sockt, 0);
                 int error = receiveProtocol.receive(sockt, SIZE, WAIT_STOP, false);
                 if(error < 0) continue;
-                // int fileSize = (int) receiveProtocol.getDataAsString()[0];
+                string s_size = receiveProtocol.getDataAsString();
+                cout << s_size << endl;
+                unsigned int fileSize = stoi(s_size);
+                cout << "Tamanho: " << fileSize << endl;
+                sendProtocol.reset();
+                if(hasEnoughSpace(fileSize)) {
+                    sendProtocol.setData(vector<BYTE>(1,(BYTE)0), OK);
+                    sendProtocol.sendMessage(sockt,0);
+                } else {
+                    cout << "ERROR: não há espaço disponível\n";
+                    sendProtocol.setData(vector<BYTE>(1,(BYTE)SPACE_ERR), ERROR);
+                    sendProtocol.sendMessage(sockt,0);
+                    continue;
+                }
+                receiveProtocol.reset();
+                receiveProtocol.receive(sockt,DATA,SLIDING,true);
+                cout <<"conteudo: "<< receiveProtocol.getDataAsString()<<endl;
+                writeFile(getWorkingPath()+"/"+args,receiveProtocol.getData());
+                sendProtocol.reset();
+                receiveProtocol.reset();
             }else if(command == "help"){
                 printCommandsList();
             }else{