[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 2chのread.cgiへ]
Update time : 05/09 15:16 / Filesize : 136 KB / Number-of Response : 517
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

Java ネットワークプログラミング 【教えて!】



1 名前:じぇいそん [04/06/03 14:00]
ネットワークプログラミング相談室ではいろいろな言語の質問が混ざっているようなの
で、 Java 用にスレを立ててみることにしました。


Java によるTCP/IPソケットプログラミング、
ネットワークサーバーの構築、RMI 、JINI 、
分散コンピューティングなどについての技や
プログラミングついてみんなで話し合いましょう!!

関連スレ:
ネットワークプログラミング相談室 Port9 pc5.2ch.net/test/read.cgi/tech/1080658835/


331 名前:デフォルトの名無しさん mailto:sage [2006/09/07(木) 18:28:47 ]
>>329

>「1000*1000バイトか、ストリームの終わりまで読みこむ」という意味の命令ではないこと。

クライアント側に失敗となる節が無いのに、
結果が途中で尻切れになる原因が問題なのです。

「クライアント側が、どうやって何バイト読み込むかや終わりまで読み込むか」などの
解決策を問題にしているわけではありません。

結果が途中で尻切れになる原因が問題なのですが
勝手に読み替えてませんか?


332 名前:デフォルトの名無しさん [2006/09/07(木) 19:25:52 ]
いつまでも的確なレスが無くて、調べてみたんですけど、
これってまだ直ってないバグなんじゃないですか?
bugs.sun.com/bugdatabase/view_bug.do?bug_id=4188105
bugs.sun.com/bugdatabase/view_bug.do?bug_id=4125538

333 名前:デフォルトの名無しさん mailto:sage [2006/09/07(木) 19:48:05 ]
じゃ、仕事も終わりだし、今日は風俗に行かないでこのスレ眺めてようや!

334 名前:デフォルトの名無しさん mailto:sage [2006/09/07(木) 19:58:25 ]
>>332
それ、既に closed fixed だし、
読み込みが途中から始まるってバグだから見当違いだと思うぞ。

尻切れになるのは低レベルAPI からの出力を極力そのまま返すという意味で
便利ではないかもしれないが、正しい実装であるとはいえる。
低レベルAPI が何故尻切れになるかは >>312 が既に予想してるとおり。

もう一つ言うと、InputStream は尻切れになってはいけないとは、
どこにも規定されていないので、
その意味でも URLConnection#getInputStream() が返す
InputStream の実装は正しく、バグではない。

335 名前:デフォルトの名無しさん mailto:sage [2006/09/07(木) 20:06:58 ]
正しい実装とか規定とかぬかしているけど、実際に確かめから発言してるのかな・・・

336 名前:デフォルトの名無しさん mailto:sage [2006/09/07(木) 20:18:22 ]
>>335
確かめる必要なんかないよ。それとも >>311 は嘘ついてるのか?

java.sun.com/j2se/1.5.0/ja/docs/ja/api/java/io/InputStream.html#read(byte[])
> b が null の場合は、NullPointerException がスローされます。
> b の長さが 0 の場合、バイトは読み込まれず、0 が返されます。
> そうでない場合は、1 バイト以上読み込み処理を行います。
> ストリームがファイルの終わりに達しているために読み込むバイトがない場合は、値 -1 が返されます。
> そうでない場合は、1 バイト以上読み込まれ、b に格納されます。

InputStream が規定してるのは「1バイト以上読み込む」であって
EOF か b が満杯になるまで読み込む、とはどこにも書いてない。

337 名前:デフォルトの名無しさん mailto:sage [2006/09/07(木) 20:27:17 ]
available()があるってことが全てなのさ。

338 名前:デフォルトの名無しさん mailto:sage [2006/09/07(木) 22:44:37 ]
>確かめる必要なんかないよ。それとも >>311 は嘘ついてるのか?

ほら、だから憶測で話してもね・・
さっきは、思い込みとかだったし。

>、とはどこにも書いてない。

何度もわざわざAPIを引用するのは構わないけど、
そのAPIから読み取って、原因は何かを>>311
指摘してほしいんじゃないか?

>InputStream が規定してるのは「1バイト以上読み込む」であって EOF か b が満杯になるまで読み込む、とはどこにも書いてない。

「EOF か b が満杯になるまで読み込む」ことを話しているのではなくて、
read(byte[])ではなぜ尻切れなのかなんだけど?
read(byte[])ではなぜ全部読み込めないのかじゃないよ。
ずいぶんと自尊心が強い人なんだね。

同じ事を繰り返していて、そろそろ醜いんだけどもう止めてくれる?
byte[]とchar[]がどうとか言ってたけど、結局なにか関係あるのか?

339 名前:デフォルトの名無しさん mailto:sage [2006/09/07(木) 23:25:35 ]
べつにさ、煽られようが何だろうがべつにこっちは困らないんだよね。
レポートの締め切りに間に合わないのはあんたなんだし。



340 名前:デフォルトの名無しさん mailto:sage [2006/09/07(木) 23:26:22 ]
↓ここで"勝利宣言"

341 名前:デフォルトの名無しさん mailto:sage [2006/09/08(金) 00:01:53 ]
はい、readのスニペット。



int cnt = 0;

while(cnt >= READBYTES){
int tmpcnt = read(READBYTES);

if(tmpcnt <= 0){
throw nullpo;
 }

cnt += tmpcnt;
}



342 名前:デフォルトの名無しさん mailto:sage [2006/09/08(金) 00:39:03 ]
誰か一人だけが悔しいみたい

プププ

今日は風俗行かなくても楽しめたな

プププ


343 名前:デフォルトの名無しさん mailto:sage [2006/09/08(金) 00:49:19 ]
>>338
> read(byte[])ではなぜ尻切れなのかなんだけど?
> read(byte[])ではなぜ全部読み込めないのかじゃないよ。
……。何が違うのかを説明してくれ。

344 名前:デフォルトの名無しさん mailto:sage [2006/09/08(金) 01:22:08 ]
>>338 例えば、
上は、初めから読み込もうが途中から読み込もうが、
尻切れ(終わりが途中で切れる)に関係していない。

下は、必ず初めから読み込まれている必要があって、かつ、
予定していたところ(長さ)まで読み込んで全部読み込んだといえるが、
この全部(初めから終わりまで)読み込むかどうかは尻切れと関係ない。

たしか、途中で尻切れになる原因だったよね。
日本語の解釈の差だと思うけど・・

今ちょっと忙しいからこれぐらい。
available()たしかに・・
フーゾク、俺も連れてってくれ・・

345 名前:デフォルトの名無しさん mailto:sage [2006/09/08(金) 01:55:46 ]
>>343
字数が違うんじゃね?

346 名前:デフォルトの名無しさん mailto:sage [2006/09/08(金) 02:08:05 ]
>>338
> read(byte[])ではなぜ尻切れなのかなんだけど?
そーゆー仕様だから。以上。

で良いんじゃないかと思ってみたりする。

347 名前:デフォルトの名無しさん mailto:sage [2006/09/08(金) 06:42:42 ]
風俗もいいが、エイズで身体が腐っちゃうのは勘弁だな。

348 名前:デフォルトの名無しさん mailto:sage [2006/09/08(金) 07:38:38 ]
ストリームのバイナリー転送で
途中で切れて終わったり
完了しなかったりしてるけど
int in.read()
で1バイトずつちまちまやらないと
ダメなんじゃないのか?

349 名前:デフォルトの名無しさん mailto:sage [2006/09/08(金) 09:28:26 ]
InputStream in=con.getInputStream ();
byte[] buf=new byte[1000*1000];
int size=0;

for (int k=0; size<buf.length && (k=in.read())!=-1;)
{
buf[size++]=(byte)k;
}

これはチマチマですが、尻切れぜずにストリーム終わりまで読み込めます。解決策。

>>341

for (;;)
{
int sz=in.read(buf, size, buf.length);
if (size>=buf.length || sz==0 || sz==-1) break;
size+=sz;
}

でも、urlが "www.yahoo.co.jp/"などは例外が出ます。

Exception in thread "main" java.lang.IndexOutOfBoundsException
at sun.net.www.http.ChunkedInputStream.read(Unknown Source)
at java.io.FilterInputStream.read(Unknown Source)
at sun.net.www.protocol.http.HttpURLConnection$HttpInputStream.read(Unkn
own Source)
at Test.main(Test.java:37)

とすると、InputStreamは、int read()ですむのですが、
int read(byte[]), int read(byte[],int,int)は、(どうやって使うかと言うよりも)自分で使うときはどこが使いどころなんでしょうか?



350 名前:デフォルトの名無しさん mailto:sage [2006/09/08(金) 09:52:26 ]
>>329はやさしいなあ

351 名前:デフォルトの名無しさん mailto:sage [2006/09/08(金) 10:15:56 ]
>>349
> for (int k=0; size<buf.length && (k=in.read())!=-1;)
> buf[size++]=(byte)k;
これ、尻切れにはならんかもしれんが、最初に 0が入らんか?

> int sz=in.read(buf, size, buf.length);
InputStream の仕様では、size が 0以外の条件で この行を実行する場合
IndexOutOfBoundsException投げないといけない事になってる。
in.read(buf, size, buf.length - size) とかしないと。

あと、size>=buf.length の条件でループ抜けるなら size += sz やった後の方が良いぞ。
ついでに言うと、sz == 0 も特に要らない。

352 名前:デフォルトの名無しさん mailto:sage [2006/09/08(金) 10:18:48 ]
> これ、尻切れにはならんかもしれんが、最初に 0が入らんか?
あ、入らないね。失敬失敬。

353 名前:デフォルトの名無しさん mailto:sage [2006/09/08(金) 10:45:51 ]
>>350確かにやさしいです。読み違えなかったらですけど・・

InputStream in=con.getInputStream ();
byte[] buf=new byte[1000*1000];
int size=0;

for (int k; size<buf.length; ++size)
{
k=in.read();
if (k!=-1) break;
buf[size]=(byte)k;
}

>>341 がいいたいのはこれでしょ?

for (int sz; size<buf.length; size+=sz;)
{
sz=in.read(buf, size, buf.length);
if (sz==-1) break;
}

int InputStream.read(byte[],int,int)は結局どのあたりで使うのだろう・・

354 名前:デフォルトの名無しさん mailto:sage [2006/09/08(金) 11:01:35 ]
こっちね。

for (int sz; size<buf.length; size+=sz;)
{
sz=in.read(buf, size, buf.length - size);
if (sz==-1) break;
}


355 名前:デフォルトの名無しさん mailto:sage [2006/09/08(金) 13:47:45 ]
>>311
>java.net.URLConnection con=url.openConnection();
>InputStream input=con.getInputStream();
>byte[] buffer=new byte[1000*1000];
>int size=input.read(buffer);
>String data=new String(buffer, 0, size);  

このコードが、「(1000*1000バイトから溢れない範囲で、)ストリームの終わりまで読め」
っていう意味では無いことは理解してる?

まぁ、理解してないから、
>>331
>クライアント側に失敗となる節が無いのに、
>結果が途中で尻切れになる原因が問題なのです。
なんて、頓珍漢なこと言ってるんだろうけど。
クライアント側で、「尻切れでいいよ」っていう意味のプログラム(>>311)書いてるのに、
尻切れにならない理由がない。もちろん、常に尻切れになるって意味ではない。

> int InputStream.read(byte[],int,int)は結局どのあたりで使うのだろう・・
そりゃ、>>353の前半よりも、>>354の方が効率が良いからだろ。
動作速度無視、動けば良い、というのだったら、int InputStream#read()だけで足りる。

byte[]、char[]云々は、
>>316
> Reader input=new InputStreamReader(con.getInputStream());
> とやると、全部読み込めるようなので、
を受けて。それで仮に読みこめたとしても、元のコードで読みたかったものとは違うものになる、って意味。
ああ、でも最終的に
>String data=new String(buffer, 0, size);  
とStringにしたいのか。なら、問題無い。


356 名前:デフォルトの名無しさん mailto:sage [2006/09/08(金) 15:41:18 ]
Runtime.exec() で起動した Process のプロセスIDはどうすればわかりますか?

357 名前:デフォルトの名無しさん [2006/09/08(金) 17:10:29 ]
>>355
お前はもうしゃしゃり出てこないくていい。

お前は最後まで気がついてないだろうけど、もう解決してるんだよ。

素直に「私だけわからないので、教えてください」と書けこの阿呆が!

>このコードが、「(1000*1000バイトから溢れない範囲で、)ストリームの終わりまで読め」

って勝手に解釈している、あなたが原因です。そんな事はどこから読み取れるのでしょうか?

お前はいつまでも図々しくて頭悪いの分かったから、このスレの初めに戻ってもっと熟読してこい。

ところで、何度も同じことしか書いてないけど、お前は実際に試してないで、勝手なこと言ってるんじゃないのか?

どうも懲りてないようだから、今後はおまえの事を監視して付け狙うしかなさそうだな。

何か起こる前に、せいぜい身近なことに気を配ってた方がいいだろう。

358 名前:デフォルトの名無しさん mailto:sage [2006/09/08(金) 17:12:45 ]
またまたワロタ

359 名前:デフォルトの名無しさん [2006/09/08(金) 17:23:26 ]
>355
知ってると思うけど、
int InputStream#read(byte[],int,int) は
int InputStream#read()を内部で回している使っているだけだぞ。

サブクラスで実装する人は、もっと効率が良い方法でやるとよいというだけで、
つべこべ言わずに、動作速度重視・効率も良い実装を書いてみろや!



360 名前:デフォルトの名無しさん [2006/09/08(金) 17:25:37 ]
>>355そりゃ、>>353の前半よりも、>>354の方が効率が良いからだろ。
これの意味が分からないけど、何を根拠にそういえるの?


361 名前:デフォルトの名無しさん mailto:sage [2006/09/08(金) 17:27:57 ]
へー、Javaのネットワークって感情で書くのか

362 名前:デフォルトの名無しさん mailto:sage [2006/09/08(金) 17:29:35 ]
逃げてばかりで
またまたワロタ

363 名前:デフォルトの名無しさん mailto:sage [2006/09/08(金) 17:41:25 ]
へー、Javaのネットワークってテイラー展開で書くのかですが、何か?

364 名前:デフォルトの名無しさん mailto:sage [2006/09/08(金) 17:47:04 ]
ストリームからのデータ読み取りはニュートン法で収束させますが何か?

365 名前:デフォルトの名無しさん mailto:sage [2006/09/08(金) 18:03:27 ]
収束ということは、零点がある保障はどこでわかるの?

366 名前:デフォルトの名無しさん mailto:sage [2006/09/08(金) 18:17:37 ]
>>364読み取りは微分できるの?

367 名前:デフォルトの名無しさん mailto:sage [2006/09/08(金) 18:25:09 ]
よっぽど悔しかったんだろうな…





368 名前:デフォルトの名無しさん mailto:sage [2006/09/08(金) 18:43:38 ]
テイラー級数?

369 名前:デフォルトの名無しさん [2006/09/08(金) 20:30:27 ]
今日も風俗行かないで、こっちを覗いてみたけど
いつまでも恥ずかしい奴だな
オレの代わりに、誰でもいいから奴をグーで殴ってくれないか?



370 名前:デフォルトの名無しさん mailto:sage [2006/09/08(金) 22:02:49 ]
1バイト読みはバカのやることです。

371 名前:デフォルトの名無しさん mailto:sage [2006/09/08(金) 22:23:33 ]
1ビット読みは学生はやらないことです。

372 名前:デフォルトの名無しさん mailto:sage [2006/09/09(土) 02:44:55 ]
かっこだけつけて何も作れない奴って、一番かっこ悪いんだなぁ〜
と思った。

373 名前:デフォルトの名無しさん mailto:sage [2006/09/09(土) 08:57:00 ]
>>372
お前も現状口だけだけどな。

374 名前:デフォルトの名無しさん mailto:sage [2006/09/09(土) 09:41:53 ]
とりあえずおこちゃまはAPIとドキュメントの違いくらい理解してくれ

375 名前:デフォルトの名無しさん mailto:sage [2006/09/09(土) 09:59:48 ]
>>374
お前はほんとに口だけだな。

376 名前:デフォルトの名無しさん mailto:sage [2006/09/09(土) 12:12:41 ]
ところで、彼は尻切れになる事を理解とか納得とかできたのだろうか?

377 名前:デフォルトの名無しさん mailto:sage [2006/09/09(土) 12:59:07 ]
低能、気違いの類いは放置推奨

378 名前:デフォルトの名無しさん mailto:sage [2006/09/09(土) 22:08:44 ]
風俗にも行かないで
ストレスのはけ口がない
おばちゃんたちと同じのが
どこにでもいるんだな〜

379 名前:デフォルトの名無しさん mailto:sage [2006/09/10(日) 00:20:26 ]
>>376出来なかったんじゃないの?ところで君は理解できたの?



380 名前:デフォルトの名無しさん mailto:sage [2006/09/10(日) 17:43:39 ]
>>341 readのスニペット提示ありがとうございます。
これはストリームで良く使うパターンだった事を忘れてました。
>>337 それとavailable()の提示も参考になりました。

381 名前:デフォルトの名無しさん mailto:sage [2006/09/10(日) 20:57:01 ]
available()のAPIにある
>戻り値: ブロックしないで入力ストリームから読み込むことができるバイト数
このブロックって具体的に何の事ですか?

382 名前:デフォルトの名無しさん mailto:sage [2006/09/10(日) 22:36:26 ]
www.google.co.jp/search?q=socket+%E3%83%96%E3%83%AD%E3%83%83%E3%82%AF

383 名前:デフォルトの名無しさん mailto:sage [2006/09/11(月) 00:20:37 ]
>>382どうも!

384 名前:デフォルトの名無しさん mailto:sage [2006/09/11(月) 06:37:01 ]
でんでん!

385 名前:デフォルトの名無しさん mailto:sage [2006/09/11(月) 15:34:34 ]
>>359
>>355
>知ってると思うけど、
>int InputStream#read(byte[],int,int) は
>int InputStream#read()を内部で回している使っているだけだぞ。

InputStreamではそうだが、SocketInputStreamでは、
int read(byte[], int, int)がint read()を呼び出すわけだが。
少なくともSun Javaの1.5.0では。
どこかで、ネットワークの話から、ジェネリックなInputStreamの話に遷移してたのか?


386 名前:デフォルトの名無しさん mailto:sage [2006/09/11(月) 18:16:11 ]
でんでんだからじゃねーの
ところで、でんでんってなんだよ!

387 名前:デフォルトの名無しさん mailto:sage [2006/09/11(月) 19:40:49 ]
>>385
お前は頭わるそうだな

388 名前:デフォルトの名無しさん mailto:sage [2006/09/12(火) 01:49:48 ]
>>385
何を聞きたいの分からないんだけど、聞きたい事はそんなに大事なのか?

389 名前:デフォルトの名無しさん mailto:sage [2006/09/13(水) 23:20:00 ]
Socket soc=new Socket(host,port);
BufferedOutputStream buffOut=new BufferedOutputStream(soc.getOutputStream ());
PrintStream out=new PrintStream (buffOut);

soc.close()とやると、自動でout.close()、buffOut.close()になるのでしょうか?
たとえばラップしているbuffOut.close()だとout.close()まではならないと思うのですけど。
よろしければご指導お願いします。



390 名前:デフォルトの名無しさん mailto:sage [2006/09/13(水) 23:36:28 ]
よく考えると、自分で試せばいいことでした
スマソ

391 名前:デフォルトの名無しさん mailto:sage [2006/09/14(木) 01:27:29 ]
試して分からなかったら聞けばいい

間違いを自分で認めることはエライ


392 名前:デフォルトの名無しさん mailto:sage [2006/09/14(木) 01:46:44 ]
ソケットを使って、サーバーからクライアントに0.1秒ごとにデータを送信することを考えています。
それで↓こんな感じのを書いたんですが…
while (true) {
  out.writeByte(…);
  out.flush();
  Thread.sleep(100);
}
クライアントにデータが届くときに、0.2秒ごとに送信2回分のデータが固まって来てしまうんです。
試しに送信周期を30ミリ秒にしてみたらやっぱり0.2秒ごとに固まって来ました。
これは仕様ですか?

393 名前:デフォルトの名無しさん mailto:sage [2006/09/14(木) 02:00:51 ]
始めの質問でoutとinで多少違いますが、
soc.close()ではjava.io.*関係は閉じませんでした。
in.close();
soc.close();
が作法のようです。

soc.close();
in.close();
b=in.read();
Exception in thread "main" java.io.IOException: Stream closed
at java.io.BufferedInputStream.getBufIfOpen(Unknown Source)
at java.io.BufferedInputStream.fill(Unknown Source)
at java.io.BufferedInputStream.read(Unknown Source)
at java.io.FilterInputStream.read(Unknown Source)
at k.main(k.java:22)

soc.close();
b=in.read();
in.close();
Exception in thread "main" java.net.SocketException: socket closed
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.read(Unknown Source)
at java.io.BufferedInputStream.fill(Unknown Source)
at java.io.BufferedInputStream.read(Unknown Source)
at java.io.FilterInputStream.read(Unknown Source)
at k.main(k.java:22)


394 名前:デフォルトの名無しさん mailto:sage [2006/09/14(木) 08:38:08 ]
>>392
java.net.Socketのリファレンスを読んで。
TCP_NODELAYのところ。

395 名前:392 mailto:sage [2006/09/14(木) 22:32:57 ]
>>394
解決しました!
ありがとうございました。

396 名前:デフォルトの名無しさん mailto:sage [2006/09/15(金) 05:48:39 ]
風俗?女?流行?

397 名前:デフォルトの名無しさん [2006/09/16(土) 06:04:33 ]
スニペットってC$のか?

398 名前:デフォルトの名無しさん mailto:sage [2006/09/16(土) 12:02:54 ]
リアルタイムOSでもなければ0.1秒おきに送信って厳しいなあ。
ヒント:JavaVMを含む世の中のOSのほとんどはプリエンプティブ処理。

399 名前:デフォルトの名無しさん mailto:sage [2006/09/16(土) 12:13:21 ]
>>398
引っ込め



400 名前:デフォルトの名無しさん mailto:sage [2006/09/16(土) 12:16:38 ]
RMI使ってる人いる?
EJB使ってる人は居ても
RMIをそのまま使う人に会ったことない

401 名前:デフォルトの名無しさん mailto:sage [2006/09/16(土) 12:29:18 ]
オブジェクト指向な環境では、
直接叩くより、どんどんクラスライブラリをため込んでいく流儀。
ミドルウェア書く人以外は、直接使わないのが多くても何の不思議はない。


402 名前:デフォルトの名無しさん mailto:sage [2006/09/16(土) 13:08:17 ]
JavaでP2Pのネットゲーム作るなら一番現実的なのがRMIだと思うんだけどね。

403 名前:デフォルトの名無しさん mailto:sage [2006/09/16(土) 17:16:53 ]
RMI使ってるよ。

404 名前:デフォルトの名無しさん mailto:sage [2006/09/16(土) 17:37:29 ]
ホントJAVAってお猿さん向けだなあ

405 名前:デフォルトの名無しさん mailto:sage [2006/09/16(土) 18:03:31 ]
>>404
Javaが嫌になったんですけど、どれに乗り換えればいいでしょうか?
当然ネットーワークが中心です。

406 名前:デフォルトの名無しさん mailto:sage [2006/09/16(土) 19:56:39 ]
嫌になったとか、乗り換えるとか、
そういう選択肢があるってことはホビー用途かい?

だったら別になんでもいいんじゃね?
動かなくてもいいんだし。

407 名前:デフォルトの名無しさん [2006/12/02(土) 12:43:46 ]
javaの代わりったって、c/c++とかたくさんあるでしょう。
tomcatとかの代用は難しいかもしれないけど

408 名前:デフォルトの名無しさん mailto:sage [2006/12/02(土) 16:51:35 ]
LISPにでもしておけ。

409 名前:デフォルトの名無しさん mailto:sage [2006/12/02(土) 19:24:38 ]
RUBYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY



410 名前:デフォルトの名無しさん mailto:sage [2006/12/02(土) 19:35:08 ]
perlwwwww

411 名前:デフォルトの名無しさん [2006/12/03(日) 21:10:57 ]
LimeWireの検索機能って、どーやってるんですか?
Winnyは、IPアドレスを暗号化したノードを使ってますが、
LimeWireにはそれがありません。
まさか、IPアドレスを適当に作って相手がLimeWireを起動してるかチェックなんてことはやってないだろし。


412 名前:デフォルトの名無しさん mailto:sage [2006/12/03(日) 21:20:19 ]
HTTPってクラアントの送信データを全部受け取りましたってのを特定できないの?
それともContent-Lengthが必ず付いてるのが前提だった?
生ソケットで作ってていっこうにinputを切断してこないから良く分からない。

413 名前:デフォルトの名無しさん mailto:sage [2006/12/04(月) 00:04:20 ]
1.0なら送り終わったらぶち切って良いよ。
HTTPのRFCぐらい読めよ。

414 名前:デフォルトの名無しさん mailto:sage [2006/12/06(水) 16:25:11 ]
>>412
この頃は 1.1 だからな。普通切れない。長さは content-length だ。


415 名前:デフォルトの名無しさん mailto:sage [2006/12/06(水) 20:21:35 ]
>>413
すまんね、そのうち読んでみる。

>>414
ありがとう、助かったよ。

416 名前:デフォルトの名無しさん mailto:sage [2006/12/07(木) 22:51:28 ]
chunked転送にも注意汁

417 名前:デフォルトの名無しさん [2007/02/01(木) 15:12:23 ]
winxp sp2, jdk6で
勉強にネットワークスキャナのようなものを書いています。

ソケットを開く時にタイムアウトを設定したいんですが、

try{
Socket hoge = new Socket();
hoge.connect(new InetSocketAddress(url, port), 1000);
}catch(SocketTimeoutException e ){
}catch(IOException e ){
}finnaly{
if(soket != null){
socket.close();
}
}

っていうような感じで複数スレッドで回しているのですが、
存在しないアドレスだとSocketTimeoutExceptionを出した後に、
SYN_SENTが20秒ほど残ったままになります。
存在しないアドレスが複数あると、SP2のharf-open 10個制限に引っかかって
20秒たってSYN_SENTが消えるまで次のconnectがブロックされてしまいます。
こういうもんなのでしょうか???

418 名前:デフォルトの名無しさん mailto:sage [2007/02/02(金) 23:52:48 ]
IPアドレスやユーザーが使っているパソコンや携帯電話などを見分けて
タグを書き換えるということは可能ですか?

ケータイ空のアクセスは <mova.html>でリンク
<PC.html>からアクセスしたときだけタグを<pc.html>へ変更

おんなじページでもIPでリンク先のタグを書き換える仕様にしたいのですが

419 名前:デフォルトの名無しさん mailto:sage [2007/02/09(金) 20:26:29 ]
>>418
CGIかSSIの仕組み(あるいはSSIを利用した言語。PHPなど)を使えばできる。

JavaScript でもできないことはないかな。携帯では JavaScript は動かない
ものと考えて <noscript> に携帯用リンクを入れておくとかね。
(あ、でも、この頃はフルブラウザがあるのか)




420 名前:デフォルトの名無しさん mailto:sage [2007/02/09(金) 21:14:15 ]
なんでjavaスレで?って感じなんだけど
Strutsとかでも簡単に出来るよ

421 名前:デフォルトの名無しさん mailto:sage [2007/02/11(日) 19:34:27 ]
>>419
ケータイからのアクセス元のIPアドレスなんて、全キャリアあわせてもクラスCで数十程度だから、
ソースIPアドレス見て、初っ端からケータイ用にページ生成すればOKだと思う。

422 名前:デフォルトの名無しさん mailto:sage [2007/03/05(月) 16:44:13 ]
質問させてください。

ただいま、ソケットを使って、ローカルにあるxmlファイルを表示するHTTPサーバを作っています。
ところが、転送の途中で接続が切れてしまう現象に困っています。
転送したいxml のファイルサイズは25kBです。

はじめはperlで書いていたのですが、そのときも同じ症状に悩まされ、
chunkedすれば直るかと思い、javaに移行したのですが、それでも同じ症状がでます。
何が原因なのかわからず、困り果てている状況です。
以下に、出力まわりのコードを載せてみますので、何か気づいた事があれば、教えていただけないでしょうか。
お願いします。

423 名前:422 mailto:sage [2007/03/05(月) 16:45:02 ]
// 出力ストリーム
BufferedOutputStream buf = new BufferedOutputStream(socket.getOutputStream());
PrintStream out1 = new PrintStream(buf);
ChunkedOutputStream out = new ChunkedOutputStream(out1,2000);

// HTTP ヘッダ
String writeStr="";
writeStr += ("HTTP/1.1 200 OK\n");
writeStr += ("Connection: close\n");
writeStr += ("Transfer-Encoding: chunked\n");
writeStr += ("Content-Type: text/xml; charset=utf-8");
writeStr += ("\r\n\r\n");
buf.write(writeStr.getBytes());

// 入力ストリーム in から出力
writeStr="";
String inputLine;
while ((inputLine = in.readLine()) != null) {
writeStr += inputLine;
}
out.write(writeStr.getBytes());


424 名前:デフォルトの名無しさん mailto:sage [2007/03/05(月) 18:31:46 ]
>>423
close() が書いてないけど…… まさか close() してないとか、そんな阿呆なミスじゃないよね?

charset=utf-8 ってやっておいて str.getBytes() は詐欺だろう。getBytes("utf-8") とかしないと。
ヘッダって "\r\n" で区切るんじゃなかったけか? "\n" で区切ってるように見えるが。
PrintStream は使うな。例外発生しても、どんな例外が発生したかわからん。
out, out1, buf があるのは良いけど、out 作ったなら out以外から出力するのは止めろ。

425 名前:デフォルトの名無しさん mailto:sage [2007/03/05(月) 22:55:51 ]
chunkedなのにchunk-sizeがない?

426 名前:422 mailto:sage [2007/03/06(火) 16:38:03 ]
>>424
close()は書いてありませんが、してあります。
また、4点のご指摘ありがとうございます。
getByte()の件、ヘッダの区切り文字の件("\r\n")、指摘のように直しました。
ただ、PrintStreamは使わないようにとの件に関しまして、
使わないほうがいいという事は知りませんでしたが、
ChunkedOutputStreamの引数がPrintStreamになっておりますので、そのようにしている次第です。
( import sun.net.www.http.ChunkedOutputStream; )
また、out以外 ( buf ) から出力させたのは、HTTPヘッダをチャンクさせない苦肉の策でした。
現在、ChunkedOutputStreamを使い続けるかどうかも含めて検討中です。

>>425
chunk-sizeなどは、ChunkedOutputStreamに任せました。
chunk-size \r\n *chunk のような形で出力されているようです。
RFCのデコーダ例を見る限り、その形で大丈夫だと思っています。

// ローカルのapacheに xml を転送させてみたら、chunk-sizeがファイルサイズ!一発で送ってました。 orz
// ストリームのバッファサイズの問題、ソケット生成時の諸変数の問題、その他の問題
// またまた、問題がどこにあるのか分からなくなってまいりました。
// ちなみに、サーバの主要部は JavaWorldの記事を参考にしています。

ttp://www.javaworld.jp/technology_and_programming/-/19362-1.html

427 名前:デフォルトの名無しさん mailto:sage [2007/03/07(水) 00:40:51 ]
一度、全部手で作ってみたほうがよくねえかなあ

428 名前:デフォルトの名無しさん mailto:sage [2007/03/19(月) 22:29:52 ]
ChunkedOutputStreamはJakarta CommonsのIOかLangにも入ってなかったかな。
Commons HTTPClientとかにも入ってるかも。
自分は知らないで自作したクチだが。

429 名前:デフォルトの名無しさん mailto:sage [2007/04/16(月) 21:48:04 ]
>>423

ChunkedOutputStreamが何者か判らないけど、

>out.write(writeStr.getBytes());

の後にout.flush()はやっているよな?
out1は自動的にフラッシュされないぞ。




430 名前:デフォルトの名無しさん [2007/04/19(木) 22:24:33 ]
ブレードサーバをクラスタ化してJavaでゲームサーバとかって
もうそろそろ現実的な組み合わせだと思うけど、事例って無いのかな

431 名前:デフォルトの名無しさん mailto:sage [2007/04/24(火) 10:14:37 ]
クラスタ化するのにジャバが有効な理由って何?






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<136KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef