send Problem

02/11/2012 11:26 BrendonHomo#1
edit
02/11/2012 11:47 Dr. Coxxy#2
Quote:
Originally Posted by BrendonHomo View Post
Quote:
BYTE Packet[] = "packetname test";
BYTE new_Packet[16];

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

send(Connect,new_Packet,strlen(new_Packet),0);
Quote:
BYTE Packet[] = "packetname test";
BYTE* new_Packet = new BYTE[strlen(Packet)+1];
int i;


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

new_packet[i] = 0;


send(Connect,new_Packet,strlen(new_Packet),0);
...
02/11/2012 11:51 BrendonHomo#3
Habs so schon ebendfalls versucht, erfolglos.

mfg
02/11/2012 11:57 Dr. Coxxy#4
dein erstes von dem du behauptest es würde funktionieren müsste aber eigtl schon ganz schön unfug angestellt haben...

die strings die du da erstellst sind ja nich null-terminiert, guck, ob du auch sicher alles so wie ich geschrieben habe hast, hab noch was hervorgehoben...
02/11/2012 12:08 BrendonHomo#5
Quote:
Originally Posted by Dr. Coxxy View Post
dein erstes von dem du behauptest es würde funktionieren müsste aber eigtl schon ganz schön unfug angestellt haben...

die strings die du da erstellst sind ja nich null-terminiert, guck, ob du auch sicher alles so wie ich geschrieben habe hast, hab noch was hervorgehoben...
Dein 2tes Beispiel geht nicht -> Crash, hab die Variable umgenannt und in der for Schleife bei jeden Durchlauf um 1 erhöht und dann 0 terminiert, passiert ingame aber immernoch nichts.

Edit: Hab ebend überprüft ob der Client das Packet richtig bekommt und dies scheint auch so allerdings kann ich mir nicht erklären warum das erste Beispiel von mir funktioniert.
02/11/2012 12:13 Dr. Coxxy#6
zeig mal deinen neuen code.

@Edit:
wenn dein new_Packet im ersten beispiel global war, wurde es mit 0 initialisiert, dann tritt das problem nicht auf.
02/11/2012 12:19 BrendonHomo#7
Quote:
Originally Posted by Dr. Coxxy View Post
zeig mal deinen neuen code.

@Edit:
wenn dein new_Packet global war, wurde es mit 0 initialisiert, dann tritt das problem nicht auf.
Code:
	BYTE Packet[] = "packetname test";
	BYTE *new_Packet = new BYTE[strlen(Packet)+1];
	int f = 0;
	for (int i = 0; i < strlen(Packet); i++) {
		 new_Packet[i] = (BYTE)(Packet[i]+0x0A);
		 f++;
	}

	new_Packet[f] = 0;

	send(sConnect,new_Packet,strlen(new_Packet),0);
PS: Den Packetnamen hab ich auch geändert nicht das irgendwer denkt das ich "packetname test" gesendet habe.
02/11/2012 12:34 Dr. Coxxy#8
wenn du schon nicht i aus der for-schleife rausnimmst, kannst du auch direkt:
Code:
new_Packet[strlen(Packet)] = 0;
schreiben.

was benutzst du eigtl für nen compiler der strlen von BYTE akzeptiert?

seh jetzt so keinen fehler mehr.
02/11/2012 12:38 BrendonHomo#9
C++ Builder XE2.
Nen Kumpel hat sich das gestern auch angeschaut, einiges versucht was ich allerdings auch schon versucht habe, und war am ende sprachlos.
02/11/2012 12:44 Dr. Coxxy#10
Code:
BYTE Packet[] = "packetname test";
for (int i = 0; i < strlen(Packet); i++) 
{
	 Packet[i] += 0x0A;
}

send(sConnect, Packet, strlen(Packet), 0);
funktioniert das denn?

wieso castest du das hier überhaupt:
Code:
new_Packet[i] = (BYTE)(Packet[i]+0x0A);
als was ist BYTE typedef't in deinem compiler?
02/11/2012 13:06 BrendonHomo#11
Quote:
Originally Posted by Dr. Coxxy View Post
Code:
BYTE Packet[] = "packetname test";
for (int i = 0; i < strlen(Packet); i++) 
{
	 Packet[i] += 0x0A;
}

send(sConnect, Packet, strlen(Packet), 0);
funktioniert das denn?

wieso castest du das hier überhaupt:
Code:
new_Packet[i] = (BYTE)(Packet[i]+0x0A);
als was ist BYTE typedef't in deinem compiler?

Nein funktioniert nicht,das casten hab ich vorsichtshalber gemacht.

Quote:
typedef unsigned char Byte; // 0..255
02/11/2012 13:13 Dr. Coxxy#12
BYTE == Byte?

ist sehr seltsam, dass dein erstes beispiel überhaupt funktioniert, sicher, dass das nicht nur ein zufallstreffer war o.ä.?
eigtl hätte der schon wegen der fehlenden 0-terminierung, zmdst ab und zu amok laufen müssen.

funktioniert dein 1. beispiel denn noch, wenn du den string 0-terminierst?
02/11/2012 13:30 BrendonHomo#13
Quote:
Originally Posted by Dr. Coxxy View Post
BYTE == Byte?

ist sehr seltsam, dass dein erstes beispiel überhaupt funktioniert, sicher, dass das nicht nur ein zufallstreffer war o.ä.?
eigtl hätte der schon wegen der fehlenden 0-terminierung, zmdst ab und zu amok laufen müssen.
Jep BYTE==Byte.
Sicher bin ich mir nicht, aber aufjedenfall krieg ich ingame eine MessageBox mit dem Text zwar ist am ende noch ein Ascii Zeichen wahrscheinlich weils nicht 0 Terminiert ist.
Aufjedenfall was ich sehr komisch finde ist das gestern dieser Code einwandfrei funktionierte, und heute Plötzlich nicht mehr (Teufelshand? :D) (Da brauch ich auch kein Dynamischen Array mehr) Und am Quellcode hab ich auch nichtsmehr verändert.


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

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

		 send(sConnect,new_Packet,sizeof(new_Packet),0);
Nein, mein erstes beispiel funktioniert nichtmehr wenn ich ihn 0 Terminiere, langsam kriege ich echt ne krise ;p
02/11/2012 13:33 Dr. Coxxy#14
dann terminier mal mit 0 und schick mit:
Quote:
send(Connect,new_Packet,strlen(new_Packet)+1,0);
02/11/2012 13:44 BrendonHomo#15
Das kann doch echt nicht sein , logischerweise muss es gehen, aber es funktioniert nicht?!
Kann das irgendwie mit dem Compiler zusammenhängen?