スレ違いかもしれない。
どうしてほしいというわけでもないので無視して頂けたら幸いです。
acceptするだけのテストサーバーを作って、CSA TCP/IP通信プロトコルのペー
ジにあったサンプルプログラムを使って、間髪入れずにメソッドopenConnection、
login、logout、closeConnectionを実行したところ
# java CSAClient 127.0.0.1 test test
CsaReaderWriter.start().1…openConnection、スレッドスタート
CsaReaderWriter.write(LOGIN test test).1
CsaWriter.write(LOGIN test test).1
CsaReaderWriter.write(LOGOUT).1
CsaWriter.write(LOGOUT).1
CsaReaderWriter.stop().1…closeConnection、スレッド停止
CsaWriter.stopThread().1…スレッド停止(ループフラグfalseにセット)
CsaWriter.run().1…スレッド実行開始(ループフラグfalseなのでLOGIN、LOGOUT送出されず)
CsaWriter.run().2…スレッド実行終了
^C
#
LOGIN、LOGOUTを送り出す前に切断されてしまいました。
原因はCsaWriter.stopが未送信のメッセージがあってもループフラグをfalseに
セットしてしまうからです。
スレッドのスケジューリングに依存しますね。
環境はLinux i686 2.4.2-2、
java version "1.4.0_03"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.0_03-b04)
Java HotSpot(TM) Client VM (build 1.4.0_03-b04, mixed mode)

ま、サンプルだからしゃぁないかな。