lowbyte1
Goto Top

Jpg copy ....

sorry edit..

Content-ID: 94055

Url: https://administrator.de/contentid/94055

Ausgedruckt am: 24.11.2024 um 06:11 Uhr

lowbyte1
lowbyte1 10.08.2008 um 17:30:57 Uhr
Goto Top
hello


ich möchte einfach ein jpg file im binary mod öffnen und dann zeichen weise in ein dynamisch alloziertes array einlesen.
so das ich dann die daten (array) senden kann per send().
Dani
Dani 10.08.2008 um 17:54:42 Uhr
Goto Top
Hi Lowbyte,
was genau möchtest du mit diesem Feature bezwecken? So richig den Sinn kann ich nicht verstehen. Denn es gäbt da noch der copy - Befehl. *g*


Gruss,
Dani

P.S. In Zukmunft bitte die EDIT Funktion benutzen und nicht jedes Mal einen Comment schreiben.
lowbyte1
lowbyte1 10.08.2008 um 18:24:59 Uhr
Goto Top
hello


ich schreibe ein server / client und möchte nun jpg/exe usw. vom client zu server und umgekehrt schicken.

dazu muss ich doch das file im binary mod öffnen oder?

und dan möchte ich die datei in einer while schleife in ein dynamisch alloziertes array einlesen bis EOF ereicht ist.


und dan senden mit

rc=send(socket ,send_buf ,len,0);


ps:mit txt files funktioniert das wunderbar !


lowbyte
Biber
Biber 11.08.2008 um 07:39:23 Uhr
Goto Top
Moin lowbyte1,

könnte es eventuell auch der function Send() liegen... die ist doch zum Senden von Nachrichten konzipiert und eher nicht zum Transport von Binärdaten, oder?

Wenn Du unbedingt eine eigen Implementierun eines filecopy()'s machen willst, dann solltest Du eventuell erwägen, zwei Filepointer zu eröffnen.
#include <stdio.h>
#include <stdlib.h>
... 
..
FILE *fIn;                   // Filepointer für zu lesendes File
FILE *fOut;                // Filepointer für zu schreibendes File
...

Grüße
Biber
lowbyte1
lowbyte1 13.08.2008 um 14:36:36 Uhr
Goto Top
helo

wie soll ich dan das file vom server auf den client übertragen ?

mit send() denke ich!

also nochmal "bin ich den so schwer zu verstehen?"

ich habe einen server und einen client geschrieben.
jetz habe ich ein befehl implementiert der sich
#get nennt.
sample= #get c:\test.txt
wen ich diesen befehl sende erkennt das der server und springt in die put_file routine.
jetz öffnet der server das angeforderte file im binary mod und liest das file bis EOF in ein dynamisch alloziertes char array.danach sende ich den char vector ala... rc = send(socket ,send_buf ,len ,0);
danach erstellt der client im binary mod ein file und liest die daten vom recv_buf, die der server gesendet hat.

wie gesagt das ganze funktioniert mit txt dateien aber nicht mit binary files.allerdings öffnet der client und der server sie dann im ascii mode.


lowbyte
lowbyte1
lowbyte1 12.12.2008 um 16:14:50 Uhr
Goto Top
helo

so nun zu meinem emaligen problem.

da man ja nicht sicher sein kann das die send funktion wirklich alles gesendet hat wegn internem buffer.
musste ich dafür eine eigene send kontroll routine schreiben.

long send_data(s_socket ,s_len ,flag)

{
	long rc_2=0;
	long rc_3=0;
	long total=0;

	// enc = crypt(&send_buf, s_len, ENCRYPT);                                          // Bitte nicht beachten !
	// memcpy(&send_buf, enc.cryptstr , s_len);                                         // S-Encryption Funktion !

	do
	{
		rc_2 = (s_len - rc_3);								// Ganze Len - rc_3 = rc_2
												// rc_3 beim 1.t durchlauf 0
		rc_3 = send(s_socket ,&send_buf[rc_3] ,rc_2 ,flag);				// Bei der send() funktion muss selber	
		if(rc_3==SOCKET_ERROR) {							// geprüft werden ob alle Daten des 
			printf("Send Fehler :%i", WSAGetLastError());				// send buffers gesendet wurden.  
			closesocket(connectedSocket);						// Die anzahl der wirklich gesendeten
			getchar();								// zeichen kann man aus dem return wert
			exit(1);								// der send funktion entnehmen.
		}

		total += rc_3;									// Return von rc_3 an total übergeben
															
	}
	while(total!=s_len);									// Wen total ungleich gesamt len dann
												// schleife widerholen und nicht
	s_len=0;										// gesendete zeichen nach senden.

	return total;

}



das gegenstuck ....



long recv_data(s_socket ,r_len ,flag)

{
	long rc_2=0;
	long rc_3=0;
	long total=0;

	do
	{

		rc_2 = (r_len - rc_3);

		rc_3 = recv(s_socket ,&recv_buf[rc_3] ,rc_2 ,flag);
		if(rc_3==SOCKET_ERROR) {
			printf("Recv Fehler :%i", WSAGetLastError());  
			closesocket(connectedSocket);
			getchar();
			exit(1);
		}


		total += rc_3;
																
	}
	while(total!=r_len);

	dec = crypt(&recv_buf, r_len, DECRYPT);
	memcpy(&recv_buf, dec.cryptstr , r_len);

	r_len=0;

	return total;
}


mit dieser routine wird dieses problem efizient gelöst ..
ein binary file müsste man jetz blockweise einlesen und senden, da man ja nicht zbsp. ein 3 gb. file in ein dynamisch alokiertes array einlesen kann..

an alle die sich meine up and download routine ansehen möchten .. bitte posten
für kritik bin ich immer zu haben..

lowbyte