ПредишенСледващото

Аз не може да прехвърля данни чрез idUDPClient / idUDPServer

Добре дошли! Пиша чат за локална мрежа. Аз използвам Indy-yskie UDP-клиент и сървър-UDP. Когато изпращате съобщение излъчване на следния проблем: ако изпратя данните от idUdpClient.Send (Адата: низ), а след това е успял да премине този ред на сървъра idUDPServer.onUDPRead събитие, т.е. редове с проблеми с доставката възникнат.
Но ако публикувам данните (например тип байт) метод idUdpClient.SendBuffer (VAR ABuffer, Конст ABytesCount: цяло число), при получаване на сървъра за данни (OnUDPRead събитие) се сдобия с "невалидни" потока от данни ADATA: Stream.
Това е кодът за "грешни" случаи:

// Изпращане на данни
процедура TMainFrm.Button1Click (Sender: TObject);
Var Buf: TMemoryStream;
# XA0; # XA0; ите: низ;
започвам
Buf: = Tmemorystream.Create;
F: = 6;
Buf.WriteBuffer (F, 1);
Buf.Position: = 0;
IdUdpClient1.SendBuffer (Buf, Buf.size);
S: = IdUdpClient1.ReceiveString;
Ако S = "" след ShowMessage ( "Без отговор")
друго ShowMessage (и);

# XA0; Ако Z = 6 след ShowMessage ( "Ok12");
# XA0; ите: = "имам";
# XA0; С Abinding правя
# XA0; SendTo (PeerIP, PeerPort, S [1], дължина (а));
# XA0; Buf.Free;

Може ли някой да ми обясни какъв е проблемът?

Разбира се, че е възможно и в съответствие да записвате всякакъв вид данни, но първо трябва да конвертирате данните в низ при изпращане, изпращане метод Send (получени низ), както и производство на обратна конверсия (от низ от типа на данните) на рецепцията. За мен този подход е, някак си не ми харесва :).
И все пак по някаква причина не работи метод SendBuffer? Ръцете ми са криви или е бъг Indy?

Сега не е необходимо Indy, но аз ще се опитам. Ако Indyah в SendBuffer използва и типизиран буфер, трябва да:
IdUdpClient1.SendBuffer (Buf.Memory, Buf.size);
И след това евентуално инсталиране на позиция 0


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

Ehehe. И ти мислиш, че сте му изпратили по този начин?


> Имам ръчни криви или това е бъг Indy?

Това не е бъг Indy, но ръцете. Вместо да се криви и неопитен. ;-)

Така че това, което по този начин се изпраща Nike?


> Какво Nike този начин изпраща?


> PChar (@F) ^

Защо. Можете просто числа и начин, структурата и статичен масив, за да предават едновременно типизиран променлива. С динамичните масиви по-трудно.


> Nike # XA0; (16.10.05 09:03)

С всичко, което каза, че вече има предвид, че размерът на предоставените данни не трябва да надвишава максимално допустимите дейтаграмите размер, или не може да се видим на добър час.

Sorki грешка, бърза ръка прекъсната (=

Памет: 0.75 MB
Време: 0.046 гр

Подкрепете проекта - споделете линка, благодаря!