Nu pot trimite date prin idudpclient

Nu pot trimite date prin idUDPClient / idUDPServer

Bine ai venit! Scriu un chat pentru rețeaua locală. Eu folosesc un client Indy-UDP și un server Udp. Când trimiteți un mesaj difuzat la următoarea problemă: dacă am trimite date de idUdpClient.Send (ADATA: string), apoi am gestiona pentru a obține această linie de eveniment idUDPServer.onUDPRead de server, de exemplu, cu livrarea de linii de probleme nu apar.






Dar dacă am posta datele (de exemplu, de tip octet) metoda idUdpClient.SendBuffer (var ABuffer, const ABytesCount: număr întreg), la primirea unui server de date (eveniment OnUDPRead) obțin un date "invalid" stream AData: Stream.
Iată codul pentru cazul "greșit":

// Trimiterea datelor
procedura TMainFrm.Button1Click (expeditor: TObject);
var buf: TMemoryStream;
# xA0; # xA0; s: șir;
începe
buf: = Tmemorystream.Create;
F: = 6;
Buf.WriteBuffer (F, 1);
Buf.Position: = 0;
IdUdpClient1.SendBuffer (Buf, Buf.size);
s: = IdUdpClient1.ReceiveString;
Dacă s = "" atunci ShowMessage ("Nici un răspuns")
altceva ShowMessage (e);

# xA0; Dacă z = 6, atunci ShowMessage ("Ok12");






# xA0; s: = "Am";
# xA0; Cu abținerea face
# xA0; SendTo (PeerIP, PeerPort, s [1], Lungimea (e));
# xA0; Buf.Free;

Poate cineva să-mi explice problema?

Desigur, este posibil și, în linie pentru a înregistra orice tip de date, dar trebuie să convertiți mai întâi datele într-un șir de caractere la trimiterea, trimiterea metoda Trimitere (string primit), și pentru a produce conversia opusă (de la șir la tipul de date) la recepție. Nu-mi place această abordare :).
Dar de ce nu funcționează metoda SendBuffer? Am curbe sau este un glonț INDY?

Acum nu e Indy, dar o să încerc. Dacă SendBuffer folosește de asemenea un tampon unic în Indy, atunci aveți nevoie de:
IdUdpClient1.SendBuffer (Buf.Memory, Buf.size);
Și nu este necesar să setați Poziția la 0


> IdUdpClient1.SendBuffer (Buf, Buf.size);

Ehehe. Și te-ai gândit, ce faci în felul ăsta?


> Am curbe sau este un glonț INDY?

Acesta nu este un glont Indy, ci mâini. Mai degrabă nu curbe, dar neexperimentate. ;-)

Deci, ce trimite Nike în acest fel?


> Ce trimite Nike în acest fel?


> PChar (@F) ^

De ce. Puteți pur și simplu să treci numere, și structura, și o matrice statică ca o variabilă untiedă. Cu matrice dinamice este mult mai dificilă.


> Nike # xA0; (10/16/05 09:03 AM)

Cu toate lucrurile care au fost deja menționate, luați în considerare faptul că dimensiunea datelor transmise nu trebuie să depășească dimensiunea maximă a datagramului, altfel nu veți fi norocoși.

Sorki pentru greșeli, o mână rapidă laminată (=

Memorie: 0,75 MB
Durată: 0,046 secunde







Trimiteți-le prietenilor: