Entwickler-Ecke
Internet / Netzwerk - TSocket: Wie Buf von Server zu Client senden ???
g1o2k4 - Di 03.04.07 16:00
Titel: TSocket: Wie Buf von Server zu Client senden ???
hi zusammen
soweit bin ich bis jetzt gekommen (senden eines bufs vom clienten zum server, nach dem tutorial von dsdt.info), aber wie sende ich einen solchen buf vom server zum clienten ??? kann mir jemand helfen vielleicht mit nem quelltext beispiel ?:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105: 106: 107:
| public Server: TServerSocket; Client: TClientSocket; MSG: String;
end;
type CustomRec = record Text: string; Zahl:integer; end;
var Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject); begin Memo1.Clear; end;
procedure TForm1.CheckMSG; begin if MSG = 'Starte Winamp' then shellexecute(handle,'open','C:\Programme\Winamp\Winamp.exe',nil,nil,sw_show);;
end;
procedure TForm1.FormDestroy(Sender: TObject); begin Client.Free; Server.Free; end;
procedure TForm1.ServerClientRead(Sender: TObject; Socket: TCustomWinSocket); var Rec: CustomRec; begin Socket.ReceiveBuf(Rec,SizeOf(Rec)); with Rec do begin Memo1.Lines.Add(Text); Memo1.Lines.Add(IntToStr(Zahl)); MSG := Rec.Text; CheckMSG; end; end;
procedure TForm1.Button1Click(Sender: TObject); begin Client.Socket.Sendtext(Edit1.Text); end;
procedure TForm1.Button2Click(Sender: TObject); begin if (Edit2.Text = 'IP Adresse') or (Edit3.Text = 'Port') then ShowMessage('Bitte IP und Port eintragen') else begin Server := TServerSocket.Create(Form1); Memo1.Lines.Add('Server gestartet.'); Client := TClientSocket.Create(Form1); Memo1.Lines.Add('Client gestartet.'); try Server.Port := strtoint(Edit3.Text); Server.Open; Memo1.Lines.Add('Server hört.'); Client.Port := strtoint(Edit3.Text);; Client.Host := Edit2.text; Client.Open; Memo1.Lines.Add('Client hört.'); except Client.Free; Server.Free; Memo1.Lines.Add('Fehler. Client und Server werden geschlossen.'); end;
end; Server.OnClientRead := ServerClientRead; end;
procedure TForm1.Button3Click(Sender: TObject); var Rec: CustomRec; begin with Rec do begin Text := 'Starte Winamp'; Zahl := 2; end; Client.Socket.SendBuf(Rec,sizeof(Rec)); end;
end. |
danke.
grüße g1o2k4
g1o2k4 - Di 03.04.07 16:52
doch es geht:
Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| Client->Server: Client.Socket.SendBuf(Rec,sizeof(Rec));
und Server->Client: Server.Socket.Connections[0].SendBuf(Rec,sizeof(Rec)); |
beim Clienten muss dann "OnRead" Socket.ReceiveBuf(); eingefügt werdenb und beim Server unter OnClientRead.
Narses - Di 03.04.07 16:59
Moin!
Ich beziehe mich auf diese Deklaration aus deinem Code oben:
Delphi-Quelltext
1: 2: 3: 4: 5:
| type CustomRec = record Text: string; Zahl:integer; end; |
g1o2k4 hat folgendes geschrieben: |
| doch es geht: |
Nein, es geht nicht; und wenn du den FAQ-Beitrag gelesen hättest, wäre dir sogar klar, warum. ;) (kleiner Tipp: lass dir mal
SizeOf(CustomRec) anzeigen und vergleich das mit der Datenmenge, die du wirklich senden willst... :D)
Abgesehen davon: wenn du doch schon weißt, wie´s geht, warum fragst du dann noch... :gruebel:
cu
Narses
g1o2k4 - Di 03.04.07 19:46
ich habs ja erst vorhin herausgefunden.
aber wenn es angeblich nicht geht wieso kommt dann das an was ich gesendet habe ? (ich kann es auch korrekt ausgeben) - keine spur von "das geht nicht"
Fighter#1 - Di 03.04.07 20:18
Also bei mir funktioniert der Code wie von die beschrieben, wie Narses es Profeziehen hat NICHT AN!
Die Zahl funktioniert aber der String nicht, is ja auch klar.
Les dir sein bitte FAQ durch!
g1o2k4 - Di 03.04.07 21:13
ok also hab mir die faq jetzt angesehn.
kommt es jetzt also auf die länge des strings an ? wenn man wie beschrieben string[20] einsetzt wird jeder beliebig lange string auf 20 zeichen gekürzt ?
mehr als 10 zeichen will ich eh nicht senden...dafür sollte es doch ohne protokoll gehn oder ?
Narses - Di 03.04.07 21:17
Moin!
g1o2k4 hat folgendes geschrieben: |
| kommt es jetzt also auf die länge des strings an ? |
Jain, auf den Datentyp (dynamisch <-> statisch). ;)
g1o2k4 hat folgendes geschrieben: |
| wenn man wie beschrieben string[20] einsetzt wird jeder beliebig lange string auf 20 zeichen gekürzt ? |
Im Zweifel, weiß ich aber grad nicht genau, was passiert, wenn man mehr als die definierte Menge Zeichen zuweisen will. :? Probier´s halt aus. ;)
g1o2k4 hat folgendes geschrieben: |
| mehr als 10 zeichen will ich eh nicht senden...dafür sollte es doch ohne protokoll gehn oder ? |
Ja, allerdings hast du dann immernoch
dieses Problem hier [
http://www.delphi-library.de/topic_Datenpakete+bei+den+SocketKomponenten+auseinanderhalten_56194.html]; und das ist nicht so einfach zu lösen... ;) jedenfalls nicht ohne ein Protokoll... :P
cu
Narses
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!