TsgcTCPClient › Yöntemler › WriteData
Ham soket üzerinden TCP sunucusuna bir metin veya ikili mesaj gönderir.
procedure WriteData(const aText: String; const aSize: Integer = 0; const aStreaming: TwsStreaming = stmNone);
| Name | Type | Açıklama |
|---|---|---|
aText | const String | Sunucuya gönderilecek metin yükü. Baytlar herhangi bir çerçeveleme başlığı olmadan doğrudan TCP soketine yazılır. |
aSize |
const Integer | Bayt cinsinden isteğe bağlı parça boyutu; sıfırdan büyük olduğunda yük, bu boyutta birden çok yığına bölünür. Tüm yükü tek bir yazma işleminde göndermek için 0 (varsayılan) kullanın. |
aStreaming | const TwsStreaming | Parçalı iletim için akış modu (stmNone, stmStart, stmContinue, stmFinish). Yükü tek bir bağımsız yazma olarak gönderen stmNone varsayılanını kullanır. |
WriteData, dizeyi aktif TCP bağlantısında ham bayt olarak iletir. WebSocket istemcisinin aksine bir metin çerçeve başlığı yoktur; peer gönderdiğiniz baytları tam olarak alır, bu yüzden her iki uç da bir ayırıcı veya uzunluk ön ekinde anlaşmalıdır. Varsayılan olarak çağrı, çağıran iş parçacığında çalışır ve baytlar sokete teslim edildiğinde döner. QueueOptions.Text, qmNone dışında bir değere ayarlandığında, mesaj queue'ya alınır ve aslında bağlantının kendi iş parçacığından gönderilir, bu da birden çok iş parçacığı eşzamanlı olarak yazdığında kilitlenmeleri önler. Herhangi bir soket istisnası OnError'a iletilir. Büyük yükler veya ikili veri gönderirken stream aşırı yüklemesini (overload) kullanın.
İstemci bağlı değilken hiçbir şey gönderilmez ve hata, Connection = nil ile birlikte OnError üzerinden ve Data not sent, the client is not connected or its handshake has not completed. hatasıyla (resourcestring S_ERROR_CLIENT_NOT_CONNECTED) bildirilir. Olay, WriteData geri dönmeden önce çağıran iş parçacığında tetiklenir ve LastError aynı metni tutar. Çağırana herhangi bir istisna fırlatılmaz ve istemcinin bağlantısı kesilmez. Bu bildirimi atlayıp mesajı önceki sürümlerin yaptığı gibi sessizce düşürmek için kodda Options.RaiseDisconnectExceptions öğesini False olarak ayarlayın. Bağlantısı koptuğu için bir yazma başarısız olduğunda ve istemci zaten yeniden bağlanmışsa, hata da Connection = nil ile bildirilir, böylece yeni bağlantı açık kalır.
oClient.WriteData('Hello Server');
procedure WriteData(const aStream: TStream; const aSize: Integer = 0; const aStreaming: TwsStreaming = stmNone);
| Name | Type | Açıklama |
|---|---|---|
aStream | const TStream | İçeriği sokete ham bayt olarak yazılacak kaynak stream. Çağıran, stream'in sahibi olarak kalır. |
aSize |
const Integer | Bayt cinsinden isteğe bağlı parça boyutu; sıfırdan büyük olduğunda stream bu boyutta birden fazla parçaya bölünür. Tüm stream'i tek bir yazma işleminde göndermek için 0 (varsayılan) kullanın. |
aStreaming | const TwsStreaming | Parçalı iletim için akış modu (stmNone, stmStart, stmContinue, stmFinish). Akışı tek bir bağımsız yazma olarak gönderen stmNone'a varsayılan olarak ayarlanır. |
WriteData, sağlanan akışı geçerli konumundan okur ve içeriği TCP soketinde ham bayt olarak iletir. TCP istemcisi verileri WebSocket çerçevelerine sarmadığından, eşin gelen baytları nasıl sınırlayacağını bilmesi gerekir (genellikle bir uzunluk öneki veya uygulama düzeyinde bir ayırıcı aracılığıyla). Çağrı varsayılan olarak çağıran iş parçacığında çalışır; QueueOptions.Binary, qmNone dışında bir değere ayarlandığında, mesaj kuyruğa alınır ve gerçekte bağlantı iş parçacığından gönderilir. Soket istisnaları yakalanıp OnError öğesine iletilir. İstemci bağlı değilken hiçbir şey gönderilmez ve hata, metin aşırı yüklemesi için açıklandığı gibi Connection = nil ile OnError üzerinden bildirilir. Akışı yalnızca çağrı döndükten sonra (veya kuyruğa alırken, gönderim tamamlandıktan sonra) serbest bırakın.
oStream := TMemoryStream.Create;
try
oStream.LoadFromFile('payload.bin');
oClient.WriteData(oStream);
finally
oStream.Free;
end;