1 名前:じぇいそん [04/06/03 14:00] ネットワークプログラミング相談室ではいろいろな言語の質問が混ざっているようなの で、 Java 用にスレを立ててみることにしました。 Java によるTCP/IPソケットプログラミング、 ネットワークサーバーの構築、RMI 、JINI 、 分散コンピューティングなどについての技や プログラミングついてみんなで話し合いましょう!! 関連スレ: ネットワークプログラミング相談室 Port9 pc5.2ch.net/test/read.cgi/tech/1080658835/
313 名前:デフォルトの名無しさん mailto:sage [2006/09/05(火) 22:25:29 ] >>312 さっそく、ありがとうございます。 タイムアウトかなと思ってたんですが、 これってライブラリーのバグの範疇だと思うのですけど… Readerでは尻切れしないので。
314 名前:デフォルトの名無しさん mailto:sage [2006/09/05(火) 23:22:08 ] >>313 Readerって思いっきりバッファリングするやん。 readで要求サイズすべてがいっぺんに取得できると考える方が間違い。
315 名前:デフォルトの名無しさん mailto:sage [2006/09/06(水) 00:06:38 ] 最近ではFTPのかわりにHTTPで100MBのファイルをダウンロードとか良くあるけど、このときってどうするの? URLConectじゃなくてSocketつかえって?
316 名前:デフォルトの名無しさん [2006/09/06(水) 04:03:21 ] Reader input=new InputStreamReader(con.getInputStream()); とやると、全部読み込めるようなので、>>314 の指摘のバッファリングとかこれと何らかの関係あるのでしょうか? java.io.InputStream か java.io.Reader かで挙動が違うのはなぜかというのだと思うのですが・・・・
317 名前:デフォルトの名無しさん mailto:sage [2006/09/06(水) 15:07:37 ] >>316 InputStreamReaderがバッファリングするかどうかは知らんが、 InputStream#readの戻り値は、JavaDocの通り、 1以上: 読んだバイト数 0: 与えた読み込み先のbyte[]の空きが0 -1: ストリームの終わり だ。-1かIOExceptionまで読み続ければ良い。 >java.io.InputStream か java.io.Reader かで挙動が違う そもそも、*InputStreamはbyteを読むもので、*Readerはcharを読むものなんだが、この違いは理解してるのか?問題にならんのか?
318 名前:デフォルトの名無しさん [2006/09/06(水) 16:30:39 ] >>317 横から失礼しますが、どうもあなたが指摘しているところはズレているようで、少し傍観してみてはいかがですか? > だ。-1かIOExceptionまで読み続ければ良い。 それで、なにが原因なんでしょか?何を指摘したいのか、さっぱり分かりません。 > そもそも、*InputStreamはbyteを読むもので、*Readerはcharを読むものなんだが どうも偉そうに聞こえるますが、その違いで何か関係があるなら、そのあたりを指摘すれば良いでしょう。 ところで、byteかcharかの違いで何か問題があるんでしょうか?
319 名前:デフォルトの名無しさん mailto:sage [2006/09/06(水) 17:37:11 ] (´Д`;) …
320 名前:デフォルトの名無しさん mailto:sage [2006/09/06(水) 17:44:04 ] >>318 ハゲワラ
321 名前:デフォルトの名無しさん mailto:sage [2006/09/06(水) 17:47:17 ] >>319-320 じゃ、仕事も終わりだし、そろそろ風俗に行こうや!
322 名前:デフォルトの名無しさん mailto:sage [2006/09/06(水) 20:19:58 ] お、イイッすねえ。 聖コスプレ学園なんてどうっすか?
323 名前:デフォルトの名無しさん mailto:sage [2006/09/06(水) 23:27:23 ] おまいらセフレか彼女ぐらい作れよ。 Javaなんか弄ってても子孫は残せないぞ。
324 名前:デフォルトの名無しさん mailto:sage [2006/09/06(水) 23:33:24 ] エロゲーほしい 誰か作ってー
325 名前:デフォルトの名無しさん mailto:sage [2006/09/07(木) 07:10:56 ] >>317 APIを写したのはわかったけど、それで君は何を言いたいわけ?
326 名前:デフォルトの名無しさん mailto:sage [2006/09/07(木) 07:25:47 ] >>325 プゲラ
327 名前:デフォルトの名無しさん mailto:sage [2006/09/07(木) 07:51:22 ] >>312 >適当なとこまで読んだところで、readが制御返すから。 これには何か根拠でもあるの?
328 名前:デフォルトの名無しさん mailto:sage [2006/09/07(木) 07:52:27 ] >>314 >Readerって思いっきりバッファリングするやん。 これには何か根拠があるの?
329 名前:デフォルトの名無しさん mailto:sage [2006/09/07(木) 13:32:07 ] >>318 >それで、なにが原因なんでしょか?何を指摘したいのか、さっぱり分かりません。 何の原因を聞いているのか知らんが、 >>311 >url がwww.yahoo.co.jp/ >のとき全部取り出せないで途中で切れて終わってしまいます。 の原因だとしたら、 >byte[] buffer=new byte[1000*1000]; >int size=input.read(buffer); が、「1000*1000バイトか、ストリームの終わりまで読みこむ」という意味の命令ではないこと。 実際に何バイト読み込むかは実装・クラス・状況次第。 だから、readの返り値を見て、ストリームの終わりに達するか、例外が発生するまで 読み込め、と言ってるんだが。 >どうも偉そうに聞こえるますが、その違いで何か関係があるなら、そのあたりを指摘すれば良いでしょう。 尻切れになる/ならないは別にして、application/octet-stream なストリームを、 InputStreamReaderで読んだら、取り返しがつかんだろ。byte[]とchar[]は可逆変換ではない。 >ところで、byteかcharかの違いで何か問題があるんでしょうか? データ型としてのbyteとcharなら単に1バイトか2バイト幅かだけの違いだが、 Readerがcharで返すということは、Readerへの入力のbyteシーケンスを 指定されたencodingに従ってunicode (ucs2)に変換してるわけだ。 得られたchar[]なりStringを同じencodingでbyte[]に変換しても、 元のバイト列になる保証は無い。
330 名前:デフォルトの名無しさん mailto:sage [2006/09/07(木) 18:18:39 ] >>329 >尻切れになる/ならないは別にして 勝手にそらしているようですけど、 ここでは尻切れが問題なんですけど? >application/octet-stream なストリームを、 InputStreamReaderで読んだら、取り返しがつかんだろ。 もしかして、ここで指摘している事は、 new InputStreamReader(input, encoding) であれば五体満足ということなんのしょうか? 文字コードは話題ではないですけど・・ >byte[]とchar[]は可逆変換ではない。 可逆変換でないから、だから、尻切れとどう関係があるんですか? >>ところで、byteかcharかの違いで何か問題があるんでしょうか? >データ型としてのbyteとcharなら単に1バイトか2バイト幅かだけの違いだが、 >元のバイト列になる保証は無い。 それが尻切れ(転送中断や想定外)と何か関係があるのか聞いているのですけど? 文字化けとか問題にしてないのですけど、 また勝手に解釈して関係ない知識自慢は見苦しい…
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ぐらい読めよ。