Autor Beitrag
seppel86
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 54



BeitragVerfasst: Fr 20.02.04 15:23 
Hi,
ich hab folgendes Problem:
Ich möchte ein Netzwerkspiel programmieren und muss dafür natürlich verschiedene Daten hin und her senden. Ein einfachen Chat zu programmieren, wo im Prinzip nur der Text als einzelner String hin und her gesendet werden muss ist kein Problem. Wenn ich allerdings auch nur den Spielernamen des Client mitsende, übernimmt er diesen nicht in die Spielervarible vom Server sondern gibt ihn im chat fenster aus.
Wie kann ich eine Unterscheidung vornehmen, da ich noch min. 10 andere Datenpakete senden muss und kann ich auch bei einem Button socket.receiveText benutzen oder muss ich das in der ServerSocket1CLientRead machen?

Danke für die Hilfe,

Seppel86
MrSaint
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1033
Erhaltene Danke: 1

WinXP Pro SP2
Delphi 6 Prof.
BeitragVerfasst: Sa 21.02.04 19:29 
zwischen textzeilen und daten-zeilen kannst z.B. so unterscheiden: duz hängst vor jede Chat-Zeile ein "C" und vor jede daten-Zeile ein "D"... Der Empfänger überprüft dann das erste zeichen und agiert entsprechend ;)


MrSaint

_________________
"people knew how to write small, efficient programs [...], a skill that has subsequently been lost"
Andrew S. Tanenbaum - Modern Operating Systems
seppel86 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 54



BeitragVerfasst: So 22.02.04 00:40 
Ok, aber wie nehme ich diese überpfrüfung vor?
ausblenden Quelltext
1:
2:
3:
4:
if empfangen=? then
begin
...
end;

Ich kann doch nicht einfach schreiben empfangen=d und wie kann ich dann diesen Buchstaben wieder entfernen?
Ich muss auch image1.mousemove Werte übertragen, dabei werden x und y koordinaten gleichzeitig übertragen, wie kann ich die dann unterscheiden?

Wahrscheinlich sind das alles total sinnlose Fragen, aber ich bin halt noch ein Delphi-noob.

Seppel86
MrSaint
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1033
Erhaltene Danke: 1

WinXP Pro SP2
Delphi 6 Prof.
BeitragVerfasst: So 22.02.04 00:44 
mach es so:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
if empfangen[1]='d' then        // [1] nimmt das erste zeichen von "empfangen"
begin
  empfangen := Delete(empfangen,1,1);    // löscht das erste zeichen von "empfangen"
  ...
end;
...


angenommen "empfangen" ist ein string und in ihm steht das was empfangen wurde ;)


MrSaint

Moderiert von user profile iconDeCodeGuru: Code- durch Delphi-Tags ersetzt

_________________
"people knew how to write small, efficient programs [...], a skill that has subsequently been lost"
Andrew S. Tanenbaum - Modern Operating Systems
seppel86 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 54



BeitragVerfasst: So 22.02.04 01:14 
ok, dass hilft mir schon wesentlich weiter. Jetzt hab ich aber nicht nur Strings sondern wie gesagt auch integer Werte. Es wird aber kein Problem sein die per inttostr und strtoint entsprechend zu kopnvertieren nach dem senden und vor dem senden. Bleibt nur noch die frage, wenn ich mousemove werte verschicke, meinetwegen:

socket.sendtext:=inttostr(xglobal);
socket.sendtext:=inttostr(yglobal);

Wie werden die dann in der empfangen Variable gespeichert. Wird nicht zuerst der xglobal wert gespeichert und dann sofort mit dem yglobal wert überschrieben?
seppel86 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 54



BeitragVerfasst: So 22.02.04 01:26 
Wenn ich das Programm kompiliere krieg ich in der Zeile empfangen:= Delete(empfangen,1,1); immer die Meldung:
[Error] Unit4.pas(262): Incompatible types: 'String' and 'procedure, untyped pointer or untyped parameter'

Was mach ich denn jetzt schon wieder falsch?
MrSaint
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1033
Erhaltene Danke: 1

WinXP Pro SP2
Delphi 6 Prof.
BeitragVerfasst: So 22.02.04 12:58 
seppel86 hat folgendes geschrieben:
Wenn ich das Programm kompiliere krieg ich in der Zeile empfangen:= Delete(empfangen,1,1); immer die Meldung:
[Error] Unit4.pas(262): Incompatible types: 'String' and 'procedure, untyped pointer or untyped parameter'

Was mach ich denn jetzt schon wieder falsch?
ooh, mein fehler :oops:

muss nich
empfangen := delete(empfangen,1,1); heißen, sondern einfach delete(empfangen,1,1);

zum zurückwandeln von deinen strings in integer kannst dir mal die funktionen StrToInt und Val angucken (--> Delphi Hilfe)... Wenn du die integers aber in strings umwandelst, werden die zu sendenden Daten größer (ein Integer ist 4 Byte groß, ein String mit einem Integer darin max. 10 Byte (je nachdem wie lang der string ist))... um das zu ändern kannst du auch einfach z.B. nen Record übers netz schicken... sieht dann z.B. so aus:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
type
  TData = record
    id: byte;
    data: integer;
  end;

  TChat = record
    id: byte;
    zeile: string;
  end;


wenn du dann Daten schickst, nimmst du TData und wenn du Strinbgs schickst nimmst du TChat... Da musst du dann jeweils noch id richtig setzen (z.B. kannst du bei TData id immer 1 setzen und bei TChat immer 2 oder so)... der empfänger überprüft dann auch das erste Byte, das angekommen ist und weiß dann, welche Struktur (TData oder TChat) er verwenden muss :)

Aber wenn dir das zu hoch is und es dir wurscht is, ob da nu ein paar Bytes mehr oder weniger übers Netz gehn, kannst natürlich auch alles mit Strings machen :) funzen solte das :)



MrSaint

_________________
"people knew how to write small, efficient programs [...], a skill that has subsequently been lost"
Andrew S. Tanenbaum - Modern Operating Systems
seppel86 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 54



BeitragVerfasst: So 22.02.04 14:12 
mit records kenn ich mich schon so ein bisschen aus, aber in meinem fall wird es das glaub ich nicht bringen.
Nochmal danke, Seppel86