lowbyte1
Goto Top

Jpg copy ....

sorry edit..

Content-Key: 94055

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

Printed on: April 26, 2024 at 04:04 o'clock

Member: lowbyte1
lowbyte1 Aug 10, 2008 at 15:30:57 (UTC)
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().
Member: Dani
Dani Aug 10, 2008 at 15:54:42 (UTC)
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.
Member: lowbyte1
lowbyte1 Aug 10, 2008 at 16:24:59 (UTC)
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
Member: Biber
Biber Aug 11, 2008 at 05:39:23 (UTC)
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
Member: lowbyte1
lowbyte1 Aug 13, 2008 at 12:36:36 (UTC)
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
Member: lowbyte1
lowbyte1 Dec 12, 2008 at 15:14:50 (UTC)
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