こんにちは。先日プログラミングを始めたハジメと申します。
Delphi6PersonalでClientSocketとServerSocketを使ったソフトを
作っています。ListBoxをServerからClientに送信してClietnで
表示したいと思っているのですが、うまくいきません^^;
SendTextを使ってみたりしたのですがどのようにServer側の
ClientReadでどのような処理をすれば良いものか見当もつきません^^;
どなたかご教授ください。お願いいたします。
>先日プログラミングを始めた・・
まずはVCLのお勉強しましょう
レスありがとうございます。
まとめて送信せずに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..
のように表示されてしまいます。(;_;)
文字列を複数回連続して送信しても受信ではその単位で受信されるとはかぎりません。(内部である程度まとめてパケット化されて送信されるため)
上記の場合は以下の2種類のどちらの方法が使えます。
■1行単位でハンドシェイクを行いながら やりとりをする。
■送信側では行単位で改行コード等の区切りコードを付加して複数行をまとめて一度に送信する。
受信側では受信したテキストを区切りコードで分解して TListBoxに表示する。
あるいは
TListBoxのかわりにTMemoを使用すれば [Text]プロパティで全体を一度に処理できますので上記の場合に限れば簡単にテストできます。
失礼しました。
TListBoxにも[Text]プロパティはありますね。
ListBox1.Items.Text で改行含めてまとめて取得できますね。
//ClientのButton1Click
begin
ClientSocket1.Socket.SendText(ListBox1.Items.Text);
end;
//ServerのServerSocket1ClientRead
begin
ListBox1.Items.Text := Socket.ReceiveText;
end;
ではどう?(動作確認はしてないけど)
きちんと動作しました!ありがとうございます!
なるほど・・・とても勉強になりました。
本当にありがとうございます!
ツイート | ![]() |