私は、クライアントとサーバに接続し、サーバが応答して.exeファイルを送信するためのコードを書いています。私は自分のコードを書くためにSFMLネットワーキングライブラリを使用しています。私は正常に正しいサイズでファイルを送信することができますが、何かが変更されていることを意味する間違ったmd5sumが、私はどこを把握することはできません。 私のコードは、誰かが私の間違いを発見することができます。 断絶:SFMLのTCPソケットとパケットを使用してファイルが破損する
#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;
}
クライアント:
#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)に「エラー」以上のものがあります。それが完了したときにのみ成功転送を考慮してください。 – Hiura
それは私がそれを試したことを送信します。 sendメンバーとrecieveメンバーは、パケット使用時にブロックされ、完了するまで続行されません。 – Jrank2013
だから私は16進エディタを使ってそれを開き、最後に向かってバイトが失われていることに気づいた。これを引き起こす可能性のあるアイデア – Jrank2013