#include <fstream.h>
#include <Windows.h>
#include <iostream.h>
#include <conio.h>
/**************
* Client.cpp *
**************/
/*******************************************************************************
* Funktion um Sockets aufzubauen *
*******************************************************************************/
void StartSock()
{
WSADATA wsaData;
if (WSAStartup (MAKEWORD(1, 1), &wsaData) != 0)
{
fprintf (stderr, "WSAStartup(): Kann Winsock nicht initialisieren.\n");
exit (EXIT_FAILURE);
}
}
/*******************************************************************************
* Socket aufräumen *
*******************************************************************************/
void EndSock()
{
WSACleanup();
}
/*******************************************************************************
* Baut an dem übergebenen port eine verbindung auf und gibt die socket *
* nummr zurück *
*******************************************************************************/
int connect(DWORD port)
{
sockaddr_in serv_addr;
int sock = socket (AF_INET, SOCK_STREAM, 0);
serv_addr.sin_family = AF_INET;
serv_addr.sin_port = htons(31337);
serv_addr.sin_addr.s_addr = inet_addr("127.0.0.1");
if (connect(sock, (sockaddr *) &serv_addr, sizeof(sockaddr)) == -1)
{
cout << "geht nicht :( ";
getch();
}
return sock;
}
/*******************************************************************************
* Diese Funktion durchsucht einen string nach einem teilstring. Geht bestimmt *
* auch leichter, aber naja, selbst ist der mann *g* *
* gibt bei keinem treffer -1 zurück, sonst die position *
*******************************************************************************/
int substrsuche(string feld, string substr)
{
for(int i=0; i<(signed)(feld.length()-substr.length()); i++)
if(feld.substr(i, substr.length()) == substr)
return i;
return -1;
}
void main()
{
fstream Quelldatei; // in diese Datei soll geöffnet und versand werden
string Quellpfad="c:\\Quell.jpg"; // in diesem pfad ist sie zu finden
char buffer[100]; // Diese 100 zeichen werden verschickt
int sock; // socket zum senden
cout << "Verbindungsaufbau";
StartSock();
sock=connect(31337); //für den verbindungsaufbau
cout << "Verbindung angenommen";
// öffne die Quelldatei
Quelldatei.open(Quellpfad.c_str(), ios::in | ios::out | ios::binary);
// lese die ersten 100 bytes
Quelldatei.read(buffer,sizeof(buffer));
// Sollange der Dateizeiger nicht am ende steht, lese weiter aus und sende
// den Inhalt an den Host
while(!Quelldatei.eof())
{
// Sende 100 Byts
send (sock, buffer, 100, 0);
// buffer leeren
for(int i=0; i<100; i++)
buffer[i]='\0';
// Lade neue 100 Byts
Quelldatei.read(buffer,sizeof(buffer));
}
// Sende den letzten Teil des Buffers
send (sock, buffer, 100, 0);
// Sende den "<eof>" als zur info für den Host
send (sock, "<eof>", 5, 0);
// Datei freigeben
Quelldatei.close();
// Sockets schließen
EndSock();
}