Ich schreibe Code für einen Client, um eine Verbindung zu einem Server und dem Server zu reagieren und eine EXE-Datei senden. Ich verwende die SFML-Netzwerkbibliothek, um meinen Code zu schreiben. Ich kann die Datei erfolgreich mit der richtigen Größe senden, aber die falsche md5sum, was bedeutet, dass etwas geändert wird, aber ich kann nicht herausfinden, wo. Hier ist mein Code kann jemand meinen Fehler erkennen. Sever:Datei wird beschädigt mit SFML TCP-Sockets und packet
#include <SFML/Network.hpp>
#include <string>
#include <iostream>
#include <fstream>
#include <vector>
int main()
{
std::string i{ "Hello World" };
sf::Packet packet;
//packet << i;
sf::TcpListener tcpl;
sf::TcpSocket tcps;
std::vector<std::string> Buffer;
std::string tmp;
std::ifstream fis("C:\\Users\\Cyber Security\\Documents\\Repos.git\\Agent\\x64\\Debug\\Project1.exe", std::ios::in | std::ios::binary);
tcpl.listen(5050);
std::cout << "Listening" << std::endl;
tcpl.accept(tcps);
while (std::getline(fis,tmp))
{
Buffer.push_back(tmp);
};
packet << static_cast<sf::Uint32>(Buffer.size());
for (std::vector<std::string>::const_iterator it = Buffer.begin(); it != Buffer.end(); ++it)
packet << *it;
sf::Socket::Status status = tcps.send(packet);
if (status == sf::Socket::Error)
std::cout << "Error";
fis.close();
std::cout << "Packet Sent" << std::endl;
tcpl.close();
std::cout << "Socket Closed" << std::endl;
system("pause");
return 0;
}
Auftraggeber:
#include <SFML/Network.hpp>
#include <string>
#include <fstream>
#include <vector>
#include <iostream>
int main()
{
std::string h{ "" };
sf::Packet packet;
sf::TcpSocket tcps;
sf::Uint32 size = 0;
std::vector<std::string> Buffer;
sf::TcpSocket::Status status= tcps.connect("10.10.10.10", 5050);
std::ofstream fis;
if (status == sf::TcpSocket::Status::Done)
{
fis.open("Project1.exe", std::ofstream::binary);
std::cout << "Starting Donwload of Packet" << std::endl;
status== tcps.receive(packet);
if (status == sf::Socket::Error)
std::cout << "Error";
std::cout << "Packet Received" << std::endl;
}
packet >> size;
for (sf::Uint32 i = 0; i < size; ++i)
{
std::string item;
packet >> item;
Buffer.push_back(item);
}
for (std::vector<std::string>::const_iterator it = Buffer.begin(); it != Buffer.end(); ++it)
fis << *it;
fis.close();
system("pause");
return 0;
}
Es gibt mehr als "Fehler" in der ['sf :: Socket :: Status 'Enum] (http://www.sfml-dev.org/documentation/2.3/classsf_1_1Socket.php#a51bf0fd51057b98a10fbb866246176dc). Stellen Sie sicher, dass die Übertragung des Erfolgs nur dann in Betracht gezogen wird, wenn es fertig ist. – Hiura
Es sendet fertig Ich habe es gerade versucht. Die Sende- und Empfangselemente blockieren bei der Verwendung von Paketen und werden erst fortgesetzt, wenn sie abgeschlossen sind. – Jrank2013
Also öffnete ich es mit einem Hex-Editor und bemerkte, dass ich gegen Ende ein Byte verlor. Irgendeine Idee was könnte dazu führen, – Jrank2013