- PR -

Servlet Application間プログラム(EOFException)

投稿者投稿内容
Kissinger
ぬし
会議室デビュー日: 2002/04/30
投稿数: 428
お住まい・勤務地: 愛知県
投稿日時: 2005-06-13 01:59
ranranさん、こんにちは。
アプレット側のHttpURLConnectionに対する connect()
は何処かにありますか?
ranran
会議室デビュー日: 2005/01/09
投稿数: 18
投稿日時: 2005-06-13 20:55
Kissingerさん、ありがとうございます。

入出力する時点で勝手に接続すると思っていましたから、すみません。

con.connect();
をcon.setDoOutput(true)の後ろに入れました。

しかし、同じようなEOFExceptionが出ています。

よろしくお願い申し上げます。
Kissinger
ぬし
会議室デビュー日: 2002/04/30
投稿数: 428
お住まい・勤務地: 愛知県
投稿日時: 2005-06-14 00:58
ranranさん、

APIドキュメントの setDoOuput()には書かれていないようですが、
手元にあるElliotte Rusty Harold著「Javaネットワークプログラミング」
オライリー・ジャパンによれば、
setDoOutput(true)すると setDoInput(false)されてしまうそうです。

そこで、先に setDoOutput(true)、つぎに setDoInput(true)と
やってみてください。
ranran
会議室デビュー日: 2005/01/09
投稿数: 18
投稿日時: 2005-06-14 21:32
Kissingerさん、ありがとうございます。

con.setDoOutput(true);
con.setDoInput(true);

前後順番を入れ替えても同じEOFExceptionがでますが、
以下のようにしますと、IllegalStateExceptionがでます。

con.setDoOutput(true);
new ObjectOutputStream(con..getOutputStream());
outProcess();
con.setDoInput(true); <<<<ここでIllegalStateExceptionがthrowされます
new ObjectInputStream(con.getInputStream());
inProcess();

エラーメッセージは
java.lang.IllegalStateException: Already connected

よろしくお願い申し上げます。
Kissinger
ぬし
会議室デビュー日: 2002/04/30
投稿数: 428
お住まい・勤務地: 愛知県
投稿日時: 2005-06-14 23:40
URLConnectionに対する set系メソッドは、
connect()後に行ってはいけません。

あと、getInputStream()するよりも前に
outputを close()したような気がします。
ranran
会議室デビュー日: 2005/06/15
投稿数: 9
投稿日時: 2005-06-15 11:45
Kissingerさん,有難うございます.

getOutputStream()の前に、setDoOutput(true), setDoInput(true)
を入れてもだめでした.(その後に、connect()を有無にかかわらず)

また、
getInputStream()の前に、
close()、disconnectを入れても、だめでした。
ObjectOutputStreamのInstanceをクロスしていますが,
他に何らか、クロスして,再接続する方法はあるでしょうか?

一応、getDoInput(), getDoOutput()を調べましたが、
最初にセットしたものより、変わりませんでした.

よろしくお願い申し上げます.
Kissinger
ぬし
会議室デビュー日: 2002/04/30
投稿数: 428
お住まい・勤務地: 愛知県
投稿日時: 2005-06-15 23:52
ranranさん、こんにちは。

ranranさん宛てにプライベートメッセージを入れて
おきましたので、ご参照ください。
ranran
会議室デビュー日: 2005/06/15
投稿数: 9
投稿日時: 2005-06-16 11:05
Kissingerさん、ありがとうございます。

テスト結果をご報告いたします.

setDoInput ->
setDoOutput ->
getOutputStream ->
output ->
getInputStream ->
input

の順でよろしいようです.

別のところがエラーになっている可能性が大です
引き続きテストしていきます.
お騒がせして申し訳ございませんでした.

P.S. TOMCATはキャッシュを持っているでしょうか、
サブレットの.classファイルを単純に変えても、
そのまま、変更は反映されないようですね.

スキルアップ/キャリアアップ(JOB@IT)