0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Windows 8.1 / Windows 10 > ClientSocketが切断される症状 > TClientSocketでもIndyでもだめ > ソフトの設計ミス

Last updated at Posted at 2017-02-13
動作環境
C++ Builder XE4

TClientSocketを用いてTCP/IP通信をしているソフトがあり、それをWindows 7に対応させた。

Windows 7上では問題なく動作をする。一方で、同じソフトをWindows 8.1, Windows 10上で動作させた場合、ClientSocketDisconnect()イベントが発生するタイミングがある。
(互換モードでWindows 7を選択しても解消しなかった)。

対処方法

  1. TClientSocketをやめてIndyのAPI(TIdTCPClient)を使う
  2. ClientSocketDisconnect()が発生する条件を把握して対処する

方法2も興味があるが、対処したところで、他の部分で問題は残りそう。

関連 http://qiita.com/7of9/items/897eee6f09b6d37af499

関連 http://www.delphigeist.com/2010/03/indy-or-tclientsockettserversocket.html

Dorin Duminica, September 1, 2010 at 8:05 AM
I do NOT encourage third party components at anytime, yes TClientSocket/TServerSocket are pretty unstable, but Indy can do it's job also, once you get the hang of it...

Indy使用への変更点

TClientSocketをやめてIndyのAPI(TIdTCPClient)を使う

TIdTCPClient is not an asynchronous component. It does not tell you when data arrives.

TClientSocketではClientSocketRead()イベントでデータ受信時の処理をできたが、TIdTCPClientはそういうイベントがない。
IdTCPClient1.InputBuffer.Sizeをチェックする処理が必要になる。

Indyに変更後

(追記 2017/02/14)

IndyのTCP/IP通信に変更したところ、同様の切断症状が見られた。

共通処理部分でWindows 8.1以降の特有の問題があるようだ。

結局、方法2の対処をすることになった。

Windows 10の設定を確認

Windows 10のネットワークアダプタの電力設定を変更してみた。

https://www.sevenforums.com/network-sharing/363165-lan-keeps-disconnecting-connecting-constantly.html
のスクリーンショットに見られる「Allow the computer to turn off this device to save power」に該当する設定をOFFにした。

切断される症状は解消しなかった。

別途、電力設定でWindows 7において設定している項目をWindows 10でも設定したが、症状は解消していない。

ソフトの設計ミス

http://qiita.com/7of9/items/bd75e5beb5fc59526882
に書いたように、設計ミスのようだった。

本来、定期的に動くべきところが、Windows 8.1/10になってから処理停止するようになっており、それが引き金となってTCP/IPが切断される状態になっていた。

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?