WindowsXP(sp2) + Delphi6 (Ent)にてファイル転送アプリケーションを
作成しています。
サーバー側はサービスアプリケーションとして動作し、TServerSocket
コンポーネントを用いて通信を行います。また、クライアントからの
電文を受信しクライアントへファイルを送信します。
クライアント側は、TClientSocketコンポーネントを用い、サーバー側
への電文送信によりサーバーよりファイルを受信します。
通信方式は、ブロッキング通信です。
クライアント側からClientSocket1.Closeと切断を行っても
ActiveConnections の数が減りません。
また、クライアント側からサーバー側へ切断要求の為の電文を送信し
サーバー側で受信後にClientSocket.Closeを行っても
ActiveConnections の数が減りません。
例えば、クライアントが2台接続されている場合、ActiveConnectionsは「2」と
なりますが、クライアント1台がClientSocket1.Closeを行った場合、
ActiveConnectionsは「1」となってほしいのですが、
ActiveConnectionsは「2」のままです。
ServerSocket.Connections のリストから削除されていない事が問題と思われますが、
どうすれば、コネクションを開放できるでしょうか?
>また、クライアント側からサーバー側へ切断要求の為の電文を送信し
>サーバー側で受信後にClientSocket.Closeを行っても
>ActiveConnections の数が減りません。
サーバー側のスレッド処理内ではActiveConnectionsの数は変わりませんが、スレッドを抜けた後はActiveConnectionsの数が減っていました。
ツイート | ![]() |