Mein problem liegt im Grunde nur darin, dass in der Datei auch "NUL"s enthalten sind. Da die meisten Funktionen Null aber als End Of String kennen, gab es teilweise schon Probleme beim auslesen der Datei, habe es dann aber so gelöst:
Dadurch wird zumindest die Datei ohne Probleme ausgelesen.
Problem scheint entweder das Empfangen oder das Schreiben zu machen.
Code :
WsaStartUp wird natürlich vor dem Aufruf der Funktionen gestartet.
Es wird auch etwas empfangen, aber teilweise fehlen Zeichen o.ä.
P.S.
Ich weiß, dass es kein "richtiges" C++ ist, da ich auch gleich fstream usw. benutzen könnte.
Mir ist fopen und ähnliches aber lieber. ;)
PHP Code:
FILE * pFile;
pFile = fopen (file.c_str(), "rb" );
string buf;
char c;
do
{
c= fgetc (pFile);
if (!feof(pFile)) buf+=c;
} while (!feof(pFile));
fclose (pFile);
Problem scheint entweder das Empfangen oder das Schreiben zu machen.
Code :
PHP Code:
void Send_Data(char *ip,std::string file)
{
SOCKET sSocket;
int res ;
FILE * pFile;
long lSize;
char * buffer;
std::string buf;
size_t result;
pFile = fopen (file.c_str(), "rb" );
char c;
do
{
c= fgetc (pFile);
if (!feof(pFile)) buf+=c;
} while (!feof(pFile));
fclose (pFile);
SOCKADDR_IN service;
service.sin_family = AF_INET;
service.sin_port = htons( 12749 );
service.sin_addr.s_addr = inet_addr(ip);
sSocket = socket( AF_INET, SOCK_STREAM, 0 );
connect( sSocket, (SOCKADDR *)(&service), sizeof(SOCKADDR_IN) );
send( sSocket, buf.c_str(), buf.length(), 0 );
send( sSocket, "[Ende]", 6, 0 );
delete [] buffer;
}
PHP Code:
void Get_Data()
{
SOCKET sSocket;
SOCKET connectedSocket;
int res ;
FILE * pFile;
long lSize;
char * buffer;
std::string buf;
size_t result;
SOCKADDR_IN service;
sSocket = socket( AF_INET, SOCK_STREAM, 0 );
buffer = (char*) malloc (sizeof(char)*100001);
memset(&service,0,sizeof(SOCKADDR_IN));
service.sin_family = AF_INET;
service.sin_port = htons( 12749 );
service.sin_addr.s_addr = ADDR_ANY;
long rc=bind(sSocket,(SOCKADDR*)&service,sizeof(SOCKADDR_IN));
rc=listen(sSocket,10);
connectedSocket=accept(sSocket,NULL,NULL);
std::string temp,temp2;
while (1)
{
temp2="";
while (temp2!="[Ende]")
{
res = recv( connectedSocket, buffer, 100000, 0);
temp2=buffer;
if (temp2=="[Ende]") break;
else if (temp2.find("[Ende]")!=std::string::npos)
{
break;
temp+=buffer;
temp=ReplaceAll(temp,"[Ende]","");
}
else temp+=buffer;
}
if (res!=SOCKET_ERROR)
{
pFile = fopen ("C:\\piccom.bmp", "wb" );
fwrite(buffer,1,res+1,pFile);
fclose (pFile);
}
else
{
connectedSocket=accept(sSocket,NULL,NULL);
}
}
delete [] buffer;
}
Es wird auch etwas empfangen, aber teilweise fehlen Zeichen o.ä.
P.S.
Ich weiß, dass es kein "richtiges" C++ ist, da ich auch gleich fstream usw. benutzen könnte.
Mir ist fopen und ähnliches aber lieber. ;)