send Problem

02/11/2012 13:47 Dr. Coxxy#16
ka, vllt ist in deiner send funktion auch i-was falsch...
02/11/2012 13:52 BrendonHomo#17
Dann dürfte aber das erste Beispiel nicht funktionieren, ich warte mal ab evt weiß wer woran genau das liegt.
Dennoch vielen dank für deine Versuche zu helfen.
02/11/2012 13:54 Dr. Coxxy#18
moment mal, dein erstes beispiel funktioniert, aber funktioniert nicht mehr, wenn du 0-terminierst und strlen+1 schickst?

send(Connect,new_Packet,strlen(new_Packet)+1,0);
02/11/2012 13:55 BrendonHomo#19
Quote:
Originally Posted by Dr. Coxxy View Post
moment mal, dein erstes beispiel funktioniert, aber funktioniert nicht mehr, wenn du 0-terminierst und strlen+1 schickst?

send(Connect,new_Packet,strlen(new_Packet)+1,0);
So siehts aus :)
02/11/2012 14:00 Dr. Coxxy#20
was ist direkt nach new_Packet bei dir deklariert?

Code:
BYTE Packet[] = "packetname test";
BYTE new_Packet[14];

for (int i = 0; i < strlen(Packet); i++)
{
new_Packet[i] = (BYTE)(Packet[i]+0x0A);
}

send(Connect,new_Packet,strlen(new_Packet),0);
(meine vermutung ist, dass bei dem send(Connect,new_Packet,strlen(new_Packet),0);, da new_Packet nicht 0-terminiert ist, noch i-was anderes mitgesendet wird, was direkt nach new_Packet im speicher steht, was zufällig die msgbox auslöst o.ä...)
02/11/2012 14:17 BrendonHomo#21
Quote:
Originally Posted by Dr. Coxxy View Post
was ist direkt nach new_Packet bei dir deklariert?

Code:
BYTE Packet[] = "packetname test";
BYTE new_Packet[14];

for (int i = 0; i < strlen(Packet); i++)
{
new_Packet[i] = (BYTE)(Packet[i]+0x0A);
}

send(Connect,new_Packet,strlen(new_Packet),0);
(meine vermutung ist, dass bei dem send(Connect,new_Packet,strlen(new_Packet),0);, da new_Packet nicht 0-terminiert ist, noch i-was anderes mitgesendet wird, was direkt nach new_Packet im speicher steht, was zufällig die msgbox auslöst o.ä...)

Deklariert ist nichtsmehr.
02/11/2012 14:20 Dr. Coxxy#22
seeehr mysteriös...

schau mal mit nem debugger rein und lass dir mal alles in eine logdatei ausgeben, was da bei dir zusammengesetzt wird, und was in new_Packet eigtl drinsteht...
02/11/2012 18:25 BrendonHomo#23
Hab jetzt mal was anderes versucht undzwar das erste genommen mit einem 0 Terminerten String, und ne schleife die, die ganze Zeit send aufruft aber die länge fängt bei 0 an und erhöht sich dann +1 irgendwann ab der länge 33 kommt ne große Messagebox auf mit dem inhalt "packtestname|ASCII Zeichen name ASCII zeichen test ASCII Zeichen Packet Ascii Zeichen Pack Ascii Zeichen te" usw. haufenweise Ascii Zeichen und abschnitte Chars vom String d.h. aber auch das der packetname richtig gesendet wurde sonst würde es nicht die MSG Box aufrufen.
Deine Vermutung müsste irgendwo stimmen.
02/12/2012 11:54 MoepMeep#24
Debuggen, alles andere ist reines suchen einer Nadel im Heuhaufen.
02/12/2012 14:24 BrendonHomo#25
Habs mir im Debugger angeschaut problem scheint irgendwie der Buffer zu sein + die länge. Der Buffer wird doppelt und dreifach beschrieben und strlen gibt eine viel kleinere Größe zurück als der String selbst ist.
02/12/2012 14:29 MoepMeep#26
Dann geh es schritt für schritt durch und schau wo der fehler liegt.
02/12/2012 14:33 xNopex#27
BYTE = unsigned char und wird normalerweise nicht für Text verwendet. Um einen Text zu speichern nimmst du std::string in c++ oder ein normales char-Array in C. Bei C-String davor bitte Speicher mit "ZeroMemory" (only windows) clearen. Und natürlich 0-Terminierung nicht vergessen.
02/12/2012 14:42 jacky919#28
Wie meinst du
Quote:
Originally Posted by xNopex View Post
"ZeroMemory" (only windows)
?
Das Makro nutzt doch nur memset und sollte damit auch auf anderen Betriebssystemen funktionieren.
02/12/2012 16:03 BrendonHomo#29
Code:
	char packet[] = "mbox test\0";
	char *buffer = new char[strlen(packet)+1];
	memset(buffer,0,64);

	for (int i = 0; i < strlen(packet); i++) {
		buffer[i] = packet[i]+0xA;
	}

	buffer[strlen(packet)] = '\0';

	send(sConnect,buffer,strlen(buffer),0);
Länge,Packet alles wird Perfekt jetzt übergeben, im Spiel die Messagebox -> Fehlanzeige.
In Olly nachgeprüft sieht alles sauber aus, langsam weiß ich echt nichtmehr weiter.

Edit: Es geht doch nun :)
Vielen dank für alle helfenden, Thread kann jetzt auch geschlossen werden :p
02/12/2012 17:53 xNopex#30
Quote:
Das Makro nutzt doch nur memset und sollte damit auch auf anderen Betriebssystemen funktionieren.
Wusste ich nich, dachte das wäre Windows-Eigene Funktion, die iwas special macht noch. Aber wenn das so ist, dann ist das so.