several napisał(a)
Ja tam sądzę, że nie ma żadnego błędu bo nie ma żadnego kodu. Na innym forum podpowiedzieli autorowi tematu algorytm ale i tak nie potrafi go zaimplementować. No ale mogę się mylić...
No i mylisz się. Kod jest, ale szczerze mówiąc to się go wstydzę. Przesyłanie plików jest przez wszystkich tłumaczone jako oczywistość, a ja mam z tym problem, no ale proszę.
Kod do wysyłania (pomijam wszystkie łączenia z socketem, makroinstrukcje, itp. bo kod się kompiluje), pętla for była używana wcześniej (zamieniałem znak char na string który reprezentował jego bity, np. 00110011 i przesyłałem każdy znak pojedyńczo):
std::ifstream plik;
plik.open(FILE, std::ios::binary);
if (plik.is_open() == false)
{
std::cout << "\n>> Opening file error!";
_getch();
return(1);
}
while (!plik.eof())
{
std::string line;
std::getline(plik, line);
if (line.length() > 0)
{
for (unsigned i = 0; i < line.length(); i++)
{
bool bDone = false;
while (!bDone)
{
int bytes = send(sock, &line[i], BUFOR, NULL);
if (bytes > 0)
{
std::cout << "\n>> Message (" << bytes << " bytes) sent!";
bDone = true;
}
else if (bytes < 0) std::cout << "\n>> Data sending error: " << WSAGetLastError();
else
{
std::cout << "\n>> Connection lost!";
bDone = true;
}
}//end: while
}//end: for
}//end: if
}//end: while (eof)
plik.close();
Kod odbierania (po stronie serwera):
char msg[BUFOR];
std::string txt;
bool bDone = false;
while (!bDone)
{
int bytes = recv(client, msg, BUFOR, NULL);
if (bytes > 0)
{
std::cout << msg;
txt += msg;
}
else if (bytes < 0) std::cout << "\n>> Error: " << WSAGetLastError();
else
{
std::cout << "\n>> User disconnected!";
bDone = true;
}
}
std::ofstream plik(FILE, std::ios::ate | std::ios::binary);
if (plik.is_open() == true)
{
plik << txt;
plik.close();
}
else std::cout << "\n>> Opening file error!";
EDIT:
Aj, aj... Już nieważne, działa. Przeczytałem tutorial na stronie www.cpp0x.pl i dowiedziałem się, że traktowanie pliku, nawet otwartego w trybie binarnym, jako strumień powoduje odczytanie i zapis jako tekst... Użyłem write() i read() i jest ok...