2008年に「プリンタ設定ダイアログの設定内容の保存と読出し」の投稿をしましたbooと申します。
その節は大変お世話になりました。現在も問題なく動作しております有難うございました。
今回はTServerSocketの使い方で自己解決できず悩んでおります。以下はご相談内容となります。
クライアントからTClientSocketで送信された文字を、サーバのTServerSocketがClientReadイベント内で文字を受信してます。
以下がサーバが文字を受信してるロジックとなります。
(組み方がわからなかったため、Webで調べたところ配列を使用した方法が多かったので参考としました。)
procedure From1.ServerSocket1ClientRead(Sender: TObject; Socket: TCustomWinSocket);
//受信数を取得
cnt := ServerSocket1.Socket.ActiveConnections;
//受信数のループ
for i := 0 to cnt-1 do
begin
//受信文字取得
workstr := ServerSocket1.Socket.Connections[cnt].ReceiveText;
//受信文字の内容によって、モロモロの処理
・モ
・ロ
・モ
・ロ
end;
この方法は1対1の通信は問題なく動作しますが、複数クライアントから同時に文字を送信すると
1回目のループは正しく文字を取得しましたが、2回目のループで文字が取得できませんでした。
そこでClientReadイベントの引数Socket:TCustomWinSocketを使用する方法に組み替えたところ
複数同時接続も正常に動作することを確認できました。
procedure From1.ServerSocket1ClientRead(Sender: TObject; Socket: TCustomWinSocket);
//受信文字取得
workstr := Socket.ReceiveText;
//受信文字の内容によって、モロモロの処理
・モ
・ロ
・モ
・ロ
end;
前置きが長くなりましたが、以下がご相談したい内容となります。
私の環境では配列情報が読み取れない場合があったため、ClientReadイベントの引数を使用しましたが
Web上では配列を使用する情報が多いため、自分の結果に不安を感じています。
配列でも上手く動作するものなのでしょうか?
それとも私の結果のように同時接続の場合を考慮する場合は、配列は使うべきではないのでしょうか?
以上。宜しくお願いします。
|