掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
IdTCPでソケット通信をして再接続 (ID:48054)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
Indyをあまり使ったことがないのですが とにかくサーバー側が複数のクライアントを相手に 正常な通信を行える仕組みを提供していています。 サンプルに置き換えたということですが List := IdTCPServer1.Contexts.LockList; 接続中のクライアント情報をTIdContextクラスのリスト型で提供するとともに 処理中にクライアント情報が増減しないように固定 IdTCPServer1.Contexts.UnlockList; LockListで固定したのを開放 で問題の部分 procedure IdTCPServer1Execute(AContext: TIdContext); 何らかのイベントが発生したとき?の受信イベントで 引数は 送信してきたクライアント情報を管理しているクラス なので sBuf := AContext.Connection.IOHandler.ReadLn(); で、クライアントから受信ができる。 だったらそのクライアントに対して返信する場合は AContext.Connection.IOHandler.Writeln('OK'); になるのでは? どうして TIdContext(IdTCPServer1.Contexts.LockList[0]).Connection.IOHandler.WriteLn('OK'); だと1回目しか正常に動かないかというのは 【1回目】 サーバー ← クライアント接続 サーバーがLockList[0] にクライアント情報を確保 LockList[0]に対して返信 【2回目】 サーバー ← クライアント接続 サーバーがLockList[1] にクライアント情報を確保 LockList[0]に対して返信←NG LockList更新のタイミングは内部を見てみないと分からないけど クライアント側が接続を切断しても 少しの間残るようにしているのかも
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.