Bir istemci ve bir sunucuya bağlanmak ve bir .exe dosyası göndermek için sunucuya bağlanmak için kod yazıyorum. Kodumu yazmak için SFML ağ kitaplığı kullanıyorum. Dosyayı doğru boyutta gönderebilirim ancak yanlış md5sum bir şeylerin değiştiğini gösterir ama nerede olduğunu anlayamıyorum. İşte benim kodum birileri hatamı tespit edebilir. Sever:Dosya SFML TCP Yuvaları ve paketleri kullanarak Bozuk Geliyor
#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;
}
Müşteri:
#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;
}
['sf :: Socket :: Status' enum] (http://www.sfml-dev.org/documentation/2.3/classsf_1_1Socket.php#a51bf0fd51057b98a10fbb866246176dc) dosyasında" Hata "dan daha fazlası var. Başarı transferini yalnızca 'Bitti' olduğunda dikkate aldığınızdan emin olun. – Hiura
Yapılan göndermeden önce denedim. Gönderme ve alma üyeleri paketler kullanırken engelleniyor ve bitene kadar devam etmeyecek. – Jrank2013
Bu yüzden bir hex editörü kullanarak açtım ve sonuna doğru bir bayt kaybettiğimi fark ettim. Bu – Jrank2013