ListBox全体を送受信するには?

解決


ハジメ  2004-12-31 02:43:07  No: 12532

こんにちは。先日プログラミングを始めたハジメと申します。
Delphi6PersonalでClientSocketとServerSocketを使ったソフトを
作っています。ListBoxをServerからClientに送信してClietnで
表示したいと思っているのですが、うまくいきません^^;
SendTextを使ってみたりしたのですがどのようにServer側の
ClientReadでどのような処理をすれば良いものか見当もつきません^^;
どなたかご教授ください。お願いいたします。


(-_-)  2004-12-31 08:10:10  No: 12533

>先日プログラミングを始めた・・
まずはVCLのお勉強しましょう


ハジメ  2004-12-31 12:36:39  No: 12534

レスありがとうございます。
まとめて送信せずにListBoxのItemの数だけ送信しようと思い
//ClientのButton1Click
var
i:Integer;
begin
  for i := 1 to ListBox1.Items.Count-1 do
  ClientSocket1.Socket.SendText(String(ListBox1.Items[i]));
end;

//ServerのServerSocket1ClientRead
begin
  ListBox1.Items.Add(Socket.ReceiveText);
end;

としてみました。すると1つめの項目だけは単独?できちんと表示
されるのですが2つ目以降はまとめてmsnmsgr.exetaskmgr.exe..
のように表示されてしまいます。(;_;)


kkk  2004-12-31 13:08:18  No: 12535

文字列を複数回連続して送信しても受信ではその単位で受信されるとはかぎりません。(内部である程度まとめてパケット化されて送信されるため)

上記の場合は以下の2種類のどちらの方法が使えます。

■1行単位でハンドシェイクを行いながら やりとりをする。

■送信側では行単位で改行コード等の区切りコードを付加して複数行をまとめて一度に送信する。
    受信側では受信したテキストを区切りコードで分解して TListBoxに表示する。

あるいは
TListBoxのかわりにTMemoを使用すれば [Text]プロパティで全体を一度に処理できますので上記の場合に限れば簡単にテストできます。


kkk  2004-12-31 13:23:19  No: 12536

失礼しました。
TListBoxにも[Text]プロパティはありますね。
ListBox1.Items.Text で改行含めてまとめて取得できますね。

//ClientのButton1Click
begin
  ClientSocket1.Socket.SendText(ListBox1.Items.Text);
end;

//ServerのServerSocket1ClientRead
begin
  ListBox1.Items.Text := Socket.ReceiveText;
end;

ではどう?(動作確認はしてないけど)


ハジメ  2004-12-31 13:43:46  No: 12537

きちんと動作しました!ありがとうございます!
なるほど・・・とても勉強になりました。

本当にありがとうございます!


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加