Java ネットワークプログラミング 【教えて!】
at TECH
[前50を表示]
250:デフォルトの名無しさん
06/03/27 19:54:08
NFSとか、1台のSCSI HDDを共有してるとかはないですか、そうですか。
251:デフォルトの名無しさん
06/04/10 17:43:05
誰かcyberlink for java使って
UPnP対応ルータのポートを開けて
AddMappingするだけの簡単な
プログラムを組んでくれませんかねぇ。
252:デフォルトの名無しさん
06/04/11 11:04:58
ヒント:宿題スレ
253:デフォルトの名無しさん
06/05/24 04:41:17
UDPを使ったネットワークプログラミングについて質問です。
UDPを使ってクライアント/サーバーを作り、複数のクライアントとやり取りできるようにサーバーにThreadを継承させました。
2人以降のクライアントがパケットを送ってきたらその度新しくスレッドを作ろうと考えているんですが、どうやってパケットが届いたときに新しくスレッドを作るんでしょうか?
どうしても2人目が送ったパケットがそのままオリジナルのサーバースレッドに受信されてしまいエラーが出るのですが・・。
254:253
06/05/24 04:59:56
少し説明不足でした。
サーバークラスの中にコンストラクタ、run()、main()と作り、main()に今のところ、
int well_known_port = SERVERPORT; // デフォルトポートナンバー
try
{
testServer server = new testServer(well_known_port);
server.start();
}
catch(IOException e)
{
System.err.println(e);
}
としてあります。
run()の中でパケットを作ったり受信したりするプロセスを全て入れてあります。
上のままではスレッドが1つしか作れてないので、クライアントが増えるたびに新しいスレッドを作りたいと思っています。
ヒントでもいいので教えていただければ嬉しいです。
255:253
06/05/24 22:33:12
解決しましたm(_ _)m
256:デフォルトの名無しさん
06/05/30 04:37:12
帯域制御機能をもったjavaのプロキシソフトサーバーソフトってありますか?
257:デフォルトの名無しさん
06/05/30 08:27:40
そもそもjavaだと遅いから全てが帯域制限されて意味が無い。
delegateとかsquidをjavaに移植してくれ。
それって全く関係無い香具師がudp送って来ても鯖プロセスが増えて。。。
udpパケットの送信元偽造されて送られてくることが無い様に祈れ。
258:デフォルトの名無しさん
06/05/30 11:18:50
javaで書かれた普通のプロクシサーバーソフトを、sleepとか使ってちょいといじれば良いだけ。
javaとネットワークプログラミングを勉強してから一月くらいでそのくらいのことはできる。
259:デフォルトの名無しさん
06/06/10 05:43:53
すいません。
String ip="192.168.0.2";
int port=5555;
Socket socket = new Socket(ip,port);
以上のような接続方法はただしいでしょうか?
ホスト名ではなくIPアドレスで指定したいのですが、
どのようにすればよいかご教授ください。
よろしくお願いします。
260:デフォルトの名無しさん
06/06/10 17:44:38
ブラウザを作っているのですが、
POSTでエンティティボディのデータを送るときの
文字コードって決まっているのでしょうか?
たとえば、サーバーがIIS+JSPコンテナで、
クライアントで入力したものをサーバーに送る場合、
どの文字コードでサーバーに送ればいいのでしょうか?
HTMLに指定されている文字コード?
261:デフォルトの名無しさん
06/06/10 21:42:37
>>259
ただしい。
ただし、IPv6対応に問題が出る(Windows Vista以後はIPv6フル対応)が、
アンタの責任だから、まあ知ったこっちゃねえし。
262:デフォルトの名無しさん
06/06/11 10:12:57
こんなんあった
URLリンク(jump.sagasu.in)
263:デフォルトの名無しさん
06/06/13 11:05:27
socketを使って、Streaming通信中、 Broken pipe
がおこってしまう場合があります
連続的なデータを送っているのですが
クライアントが切断処理をしていないのに Broken pipe
が怒ってしまうのですが、送っちゃいけないデータなどは送っていません
なんらかの心当たりがある人いらっしゃいますでしょうか?
264:デフォルトの名無しさん
06/06/16 01:42:38
>>251
URLリンク(www.cybergarage.org)
265:デフォルトの名無しさん
06/06/16 03:40:37
間のファイヤーウォールやNATに切られてもリトライするような処理ぐらい入れろ。
POSTするときの仕様ぐらい、HTTPの仕様を読もうぜ。
つーか仕様も作らないで行き当たりばったりで変な実装するな。
266:デフォルトの名無しさん
06/06/17 12:36:13
Javaでtracerout出来るようになったの?
267:デフォルトの名無しさん
06/06/18 11:46:43
>>266
raw socket位投げられるだろう。
268:デフォルトの名無しさん
06/06/18 17:08:41
へ?どうやって?
269:デフォルトの名無しさん
06/06/18 17:36:15
>>268
うぜぇしね
270:デフォルトの名無しさん
06/06/19 11:30:13
Process p = Runtime.getRuntime().exec(new String[] {"traceroute", host});
271:デフォルトの名無しさん
06/06/21 22:23:04
【教えて!】
が良い味出してる
272:デフォルトの名無しさん
06/06/27 00:11:30
サーバー側でインプットストリームを常に監視して、
ストリームにデータが入ったらある処理をはじめるようにしたいのですが、
うまいやり方ありますか?
今はサーバー側のスレッドでしたのようにまってます。
while(in.available < 1)
{
Thread.sleep(10);
}
〜ある処理〜
273:デフォルトの名無しさん
06/06/27 01:54:51
new I/O
274:デフォルトの名無しさん
06/07/01 18:10:04
>>272
BlockingI/O(通常の)で、インプットストリーム1つに対してスレッドを
1つ貼り付ける。
あるいは1つのスレッドで複数のインプットストリームを処理するなら、
>>237 の言うとおり、new I/Oを使う。
275:デフォルトの名無しさん
06/07/03 12:14:40
>>237 ではなく
>>273 です
276:デフォルトの名無しさん
06/07/04 21:05:22
時給1000円でJava教えてくださるかたを募集します
場所 所沢(池袋・高田馬場から直通)
i−want−to−study−java@hotmail.co.jp
(アドレスは全角で書いてあるので半角に直してください)
よろしくおねがいします
277:デフォルトの名無しさん
06/07/05 21:22:28
初心者なんですがこれから、ネットワーク勉強したい思ってます。
ftpクライアント、httpクライアント、echoサーバなどのperl,cの
資料はネットに豊富にあったので、大体わかってきました。
ただ、根本的な仕組みがわかってないので、これから
どうしようか考えてます。
まずは、peer to peerで、チャットやファイル交換がしたいと思います。
パソコン一台の環境なんですが勉強できますか?
パソコン一台で、2台に見せかけて通信
とかできるのかと思いまして。
パソコン2台ないとだめなんでしょうか。
本とかサイト紹介していただけるとがんばっていけそうです。
よろしくお願いします。
スレ違いでしたら、どこか飛ばしてくださいませ。
278:デフォルトの名無しさん
06/07/05 23:38:11
>>277
localhostに対してコネクション張りゃいいですよ。
279:デフォルトの名無しさん
06/07/06 01:36:14
>>278
知識不足で、具体的な方法がまだわからないですが、
できるということがわかればあとは、本などで調べたいと思います。
ありがとうございました。
280:276
06/07/17 21:29:54
教える対象は超初心者です。
専門学校などでJavaを勉強されていて夏休みだけ教えたいという方も歓迎です
281:デフォルトの名無しさん
06/07/21 21:55:33
大阪から行きます。帝国ホテルスイーツを取ってくださるなら考える余地ありです
282:デフォルトの名無しさん
06/07/21 22:22:09
仕様:
クライアントはテレビの録画予約をするGUIアプリケーション。
クライアントから番組のチャンネル、放送開始時刻、終了時刻を送信。
サーバは予約情報をDBにストック。
サーバはDBを監視していて、予約開始時刻になったら録画APIを起動させる。
クライアントは現在の予約情報などをサーバに問い合わせて表示もできる。
さて、サーバ側はどんな実装にする?
クライアント・サーバ間の通信はソケット?それともHttp?できれFirewall越えしやすい方がいい。
283:デフォルトの名無しさん
06/07/21 22:43:51
>>282 がクライアントもサーバも書くの?
284:282
06/07/21 22:47:16
>>283
サーバだけでいいです。
285:デフォルトの名無しさん
06/07/22 10:44:52
>>282
ICMP
286:デフォルトの名無しさん
06/07/22 11:32:23
>>282
MythTVのJava版クライアント作れよ。
URLリンク(www.mythtv.org)
287:デフォルトの名無しさん
06/07/23 22:16:18
>>286
つまりクライアントとのセッションを管理するフロントエンドシステムと
時刻を監視してイベントを処理するバックグランドシステムの
2アプリケーション/サーバの組み合わせにするってことですね。
2つのアプリケーション間は特に通信はいらないかな。あえていうならDB経由で情報をやりとりするということか。。。
288:デフォルトの名無しさん
06/07/23 22:17:40
>あえていうならDB経由で情報をやりとりするということか。。。
泣きたくなるくらい広いスコープのグローバル変数が誕生するわけですね。
289:デフォルトの名無しさん
06/07/23 22:37:37
>>288
もっといいやり方があるというのなら対案をだせよ。 民主党のダメ政治家かおまえは。
290:デフォルトの名無しさん
06/07/23 22:38:44
>>289
めんどいなぁ、んじゃSOAP。Axisでも使ってさ。
ほれ、コレで満足か?
291:デフォルトの名無しさん
06/07/23 22:47:12
何を揉めてるのか知らんがSOAPで組めばええやん
Firewall越えを要件に入れてるなら
292:デフォルトの名無しさん
06/07/24 00:25:01
>>291
AJAXでもいいじゃん。
293:デフォルトの名無しさん
06/07/24 00:31:09
プログラマの俺様ツールにブラウザアプリを採用するのか?w
294:デフォルトの名無しさん
06/07/24 00:33:14
>>290-292
もめてるのはフロントエンド⇔バックエンド間をデータベースを経由して情報をやり取りする部分。
ここはFirewallをこえる必要ないからhttpとは関係なくなる。
(クライアント⇔フロントエンドはAJAXでもFirewall越えるからOKなのはたしか。でも問題はここじゃない。)
295:デフォルトの名無しさん
06/07/24 00:38:03
>>294
なんなの?ageは俺らをバカにしようとかそう言う意味ですか?
296:デフォルトの名無しさん
06/07/24 01:06:34
>>294
Ajaxでいいなら「フロントエンド⇔バックエンド間」なんてものは存在せんだろ
297:sage
06/07/24 01:07:25
Httpがいいんじゃない?実装が楽だから。
298:デフォルトの名無しさん
06/07/24 01:38:05
>>296
MythTVやPostgreSQLのようなアーキテクチャも勉強した方がいい。
Ajaxを取り入れるととうやればMythTVのfrontend-backgroundのあいだのやりとりを存在なくせるのか説明してくれ。
299:デフォルトの名無しさん
06/07/24 01:43:05
Tomcatひとつで出来るだろ
300:デフォルトの名無しさん
06/07/24 01:45:56
>>299
予約の録画開始はどうする?
301:デフォルトの名無しさん
06/07/24 01:49:03
どうもせんよ、監視してAPI呼び出すだけだろ
web.xmlに監視クラス書いておしまい
302:デフォルトの名無しさん
06/07/24 10:42:58
まあ思いつかないぐらいなら実装は絶望的です。外注に出したら?
303:デフォルトの名無しさん
06/07/24 11:02:45
>>298
なんでMythTVにこだわるん?
304:デフォルトの名無しさん
06/07/24 22:03:42
MythTVは二回しか出てきてないじゃん。
305:デフォルトの名無しさん
06/08/31 13:24:54
javaでFTPクライアントソフトを作成したんですが、
認証まではうまくいくんですがPASVモードでの
dataSocket = new Socket(serverIP.replace(',','.'),serverPort);
でタイムアウトが発生し接続できません。
windowsでは問題なく実行できます。
環境は
+−−−−−−+ +−−−−−−+
LINUX−−−−| | | |
| ルータ- |−−−−−| モデム |−−−−−インターネット
WIN−−−−−−| | | |
+−−−−−−+ +−−−−−−+
ちなみにlinuxのFTPコマンドではファイル転送も問題なくできます。
原因がさっぱりわかりません。
306:デフォルトの名無しさん
06/08/31 14:03:18
PASVなのに20番を使うからです
307:デフォルトの名無しさん
06/08/31 15:18:25
>306
ポートは20でなく動的に接続しています。
305にも書いたけどwindowsではFTPに接続、転送できています。
308:デフォルトの名無しさん
06/09/01 00:18:24
FTPの勉強からやり直したほうがいいよ。
FTPプロトコル手順を理解出来てない。
309:デフォルトの名無しさん
06/09/01 13:25:12
>>305 の、1行のコード
dataSocket = new Socket(serverIP.replace(',','.'),serverPort);
だけでわかるわけないだろ。
PORTのバイトオーダー絡みじゃないかとエスパーレス。
310:デフォルトの名無しさん
06/09/02 10:16:54
>>308
またお前か・・・。お前こそいい加減RFC読んでくれ。
311:デフォルトの名無しさん
06/09/05 15:57:32
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);
url がURLリンク(www.yahoo.co.jp)
のとき全部取り出せないで途中で切れて終わってしまいます。
Reader を使うと上手くできるので、解決策よりも
どうして途中で尻切れなのかなのか教えてください。
312:デフォルトの名無しさん
06/09/05 22:15:27
>>311
適当なとこまで読んだところで、readが制御返すから。
TCPの1セグメントか、タイムアウトか、バッファ最大のどれかだろ。
InputStream#readのJavaDocを熟読せよ。
313:デフォルトの名無しさん
06/09/05 22:25:29
>>312
さっそく、ありがとうございます。
タイムアウトかなと思ってたんですが、
これってライブラリーのバグの範疇だと思うのですけど…
Readerでは尻切れしないので。
314:デフォルトの名無しさん
06/09/05 23:22:08
>>313
Readerって思いっきりバッファリングするやん。
readで要求サイズすべてがいっぺんに取得できると考える方が間違い。
315:デフォルトの名無しさん
06/09/06 00:06:38
最近ではFTPのかわりにHTTPで100MBのファイルをダウンロードとか良くあるけど、このときってどうするの?
URLConectじゃなくてSocketつかえって?
316:デフォルトの名無しさん
06/09/06 04:03:21
Reader input=new InputStreamReader(con.getInputStream());
とやると、全部読み込めるようなので、>>314の指摘のバッファリングとかこれと何らかの関係あるのでしょうか?
java.io.InputStream か java.io.Reader かで挙動が違うのはなぜかというのだと思うのですが・・・・
317:デフォルトの名無しさん
06/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:デフォルトの名無しさん
06/09/06 16:30:39
>>317
横から失礼しますが、どうもあなたが指摘しているところはズレているようで、少し傍観してみてはいかがですか?
> だ。-1かIOExceptionまで読み続ければ良い。
それで、なにが原因なんでしょか?何を指摘したいのか、さっぱり分かりません。
> そもそも、*InputStreamはbyteを読むもので、*Readerはcharを読むものなんだが
どうも偉そうに聞こえるますが、その違いで何か関係があるなら、そのあたりを指摘すれば良いでしょう。
ところで、byteかcharかの違いで何か問題があるんでしょうか?
319:デフォルトの名無しさん
06/09/06 17:37:11
(´Д`;) …
320:デフォルトの名無しさん
06/09/06 17:44:04
>>318
ハゲワラ
321:デフォルトの名無しさん
06/09/06 17:47:17
>>319-320
じゃ、仕事も終わりだし、そろそろ風俗に行こうや!
322:デフォルトの名無しさん
06/09/06 20:19:58
お、イイッすねえ。
聖コスプレ学園なんてどうっすか?
323:デフォルトの名無しさん
06/09/06 23:27:23
おまいらセフレか彼女ぐらい作れよ。
Javaなんか弄ってても子孫は残せないぞ。
324:デフォルトの名無しさん
06/09/06 23:33:24
エロゲーほしい
誰か作ってー
325:デフォルトの名無しさん
06/09/07 07:10:56
>>317
APIを写したのはわかったけど、それで君は何を言いたいわけ?
326:デフォルトの名無しさん
06/09/07 07:25:47
>>325
プゲラ
327:デフォルトの名無しさん
06/09/07 07:51:22
>>312
>適当なとこまで読んだところで、readが制御返すから。
これには何か根拠でもあるの?
328:デフォルトの名無しさん
06/09/07 07:52:27
>>314
>Readerって思いっきりバッファリングするやん。
これには何か根拠があるの?
329:デフォルトの名無しさん
06/09/07 13:32:07
>>318
>それで、なにが原因なんでしょか?何を指摘したいのか、さっぱり分かりません。
何の原因を聞いているのか知らんが、
>>311
>url が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:デフォルトの名無しさん
06/09/07 18:18:39
>>329
>尻切れになる/ならないは別にして
勝手にそらしているようですけど、
ここでは尻切れが問題なんですけど?
>application/octet-stream なストリームを、 InputStreamReaderで読んだら、取り返しがつかんだろ。
もしかして、ここで指摘している事は、
new InputStreamReader(input, encoding)
であれば五体満足ということなんのしょうか?
文字コードは話題ではないですけど・・
>byte[]とchar[]は可逆変換ではない。
可逆変換でないから、だから、尻切れとどう関係があるんですか?
>>ところで、byteかcharかの違いで何か問題があるんでしょうか?
>データ型としてのbyteとcharなら単に1バイトか2バイト幅かだけの違いだが、
>元のバイト列になる保証は無い。
それが尻切れ(転送中断や想定外)と何か関係があるのか聞いているのですけど?
文字化けとか問題にしてないのですけど、
また勝手に解釈して関係ない知識自慢は見苦しい…
331:デフォルトの名無しさん
06/09/07 18:28:47
>>329
>「1000*1000バイトか、ストリームの終わりまで読みこむ」という意味の命令ではないこと。
クライアント側に失敗となる節が無いのに、
結果が途中で尻切れになる原因が問題なのです。
「クライアント側が、どうやって何バイト読み込むかや終わりまで読み込むか」などの
解決策を問題にしているわけではありません。
結果が途中で尻切れになる原因が問題なのですが
勝手に読み替えてませんか?
332:デフォルトの名無しさん
06/09/07 19:25:52
いつまでも的確なレスが無くて、調べてみたんですけど、
これってまだ直ってないバグなんじゃないですか?
URLリンク(bugs.sun.com)
URLリンク(bugs.sun.com)
333:デフォルトの名無しさん
06/09/07 19:48:05
じゃ、仕事も終わりだし、今日は風俗に行かないでこのスレ眺めてようや!
334:デフォルトの名無しさん
06/09/07 19:58:25
>>332
それ、既に closed fixed だし、
読み込みが途中から始まるってバグだから見当違いだと思うぞ。
尻切れになるのは低レベルAPI からの出力を極力そのまま返すという意味で
便利ではないかもしれないが、正しい実装であるとはいえる。
低レベルAPI が何故尻切れになるかは >>312 が既に予想してるとおり。
もう一つ言うと、InputStream は尻切れになってはいけないとは、
どこにも規定されていないので、
その意味でも URLConnection#getInputStream() が返す
InputStream の実装は正しく、バグではない。
335:デフォルトの名無しさん
06/09/07 20:06:58
正しい実装とか規定とかぬかしているけど、実際に確かめから発言してるのかな・・・
336:デフォルトの名無しさん
06/09/07 20:18:22
>>335
確かめる必要なんかないよ。それとも >>311 は嘘ついてるのか?
URLリンク(java.sun.com)(byte[])
> b が null の場合は、NullPointerException がスローされます。
> b の長さが 0 の場合、バイトは読み込まれず、0 が返されます。
> そうでない場合は、1 バイト以上読み込み処理を行います。
> ストリームがファイルの終わりに達しているために読み込むバイトがない場合は、値 -1 が返されます。
> そうでない場合は、1 バイト以上読み込まれ、b に格納されます。
InputStream が規定してるのは「1バイト以上読み込む」であって
EOF か b が満杯になるまで読み込む、とはどこにも書いてない。
337:デフォルトの名無しさん
06/09/07 20:27:17
available()があるってことが全てなのさ。
338:デフォルトの名無しさん
06/09/07 22:44:37
>確かめる必要なんかないよ。それとも >>311 は嘘ついてるのか?
ほら、だから憶測で話してもね・・
さっきは、思い込みとかだったし。
>、とはどこにも書いてない。
何度もわざわざAPIを引用するのは構わないけど、
そのAPIから読み取って、原因は何かを>>311は
指摘してほしいんじゃないか?
>InputStream が規定してるのは「1バイト以上読み込む」であって EOF か b が満杯になるまで読み込む、とはどこにも書いてない。
「EOF か b が満杯になるまで読み込む」ことを話しているのではなくて、
read(byte[])ではなぜ尻切れなのかなんだけど?
read(byte[])ではなぜ全部読み込めないのかじゃないよ。
ずいぶんと自尊心が強い人なんだね。
同じ事を繰り返していて、そろそろ醜いんだけどもう止めてくれる?
byte[]とchar[]がどうとか言ってたけど、結局なにか関係あるのか?
339:デフォルトの名無しさん
06/09/07 23:25:35
べつにさ、煽られようが何だろうがべつにこっちは困らないんだよね。
レポートの締め切りに間に合わないのはあんたなんだし。
340:デフォルトの名無しさん
06/09/07 23:26:22
↓ここで"勝利宣言"
341:デフォルトの名無しさん
06/09/08 00:01:53
はい、readのスニペット。
int cnt = 0;
while(cnt >= READBYTES){
int tmpcnt = read(READBYTES);
if(tmpcnt <= 0){
throw nullpo;
}
cnt += tmpcnt;
}
342:デフォルトの名無しさん
06/09/08 00:39:03
誰か一人だけが悔しいみたい
プププ
今日は風俗行かなくても楽しめたな
プププ
343:デフォルトの名無しさん
06/09/08 00:49:19
>>338
> read(byte[])ではなぜ尻切れなのかなんだけど?
> read(byte[])ではなぜ全部読み込めないのかじゃないよ。
……。何が違うのかを説明してくれ。
344:デフォルトの名無しさん
06/09/08 01:22:08
>>338 例えば、
上は、初めから読み込もうが途中から読み込もうが、
尻切れ(終わりが途中で切れる)に関係していない。
下は、必ず初めから読み込まれている必要があって、かつ、
予定していたところ(長さ)まで読み込んで全部読み込んだといえるが、
この全部(初めから終わりまで)読み込むかどうかは尻切れと関係ない。
たしか、途中で尻切れになる原因だったよね。
日本語の解釈の差だと思うけど・・
今ちょっと忙しいからこれぐらい。
available()たしかに・・
フーゾク、俺も連れてってくれ・・
345:デフォルトの名無しさん
06/09/08 01:55:46
>>343
字数が違うんじゃね?
346:デフォルトの名無しさん
06/09/08 02:08:05
>>338
> read(byte[])ではなぜ尻切れなのかなんだけど?
そーゆー仕様だから。以上。
で良いんじゃないかと思ってみたりする。
347:デフォルトの名無しさん
06/09/08 06:42:42
風俗もいいが、エイズで身体が腐っちゃうのは勘弁だな。
348:デフォルトの名無しさん
06/09/08 07:38:38
ストリームのバイナリー転送で
途中で切れて終わったり
完了しなかったりしてるけど
int in.read()
で1バイトずつちまちまやらないと
ダメなんじゃないのか?
349:デフォルトの名無しさん
06/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が "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:デフォルトの名無しさん
06/09/08 09:52:26
>>329はやさしいなあ
351:デフォルトの名無しさん
06/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:デフォルトの名無しさん
06/09/08 10:18:48
> これ、尻切れにはならんかもしれんが、最初に 0が入らんか?
あ、入らないね。失敬失敬。
353:デフォルトの名無しさん
06/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:デフォルトの名無しさん
06/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:デフォルトの名無しさん
06/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:デフォルトの名無しさん
06/09/08 15:41:18
Runtime.exec() で起動した Process のプロセスIDはどうすればわかりますか?
357:デフォルトの名無しさん
06/09/08 17:10:29
>>355
お前はもうしゃしゃり出てこないくていい。
お前は最後まで気がついてないだろうけど、もう解決してるんだよ。
素直に「私だけわからないので、教えてください」と書けこの阿呆が!
>このコードが、「(1000*1000バイトから溢れない範囲で、)ストリームの終わりまで読め」
って勝手に解釈している、あなたが原因です。そんな事はどこから読み取れるのでしょうか?
お前はいつまでも図々しくて頭悪いの分かったから、このスレの初めに戻ってもっと熟読してこい。
ところで、何度も同じことしか書いてないけど、お前は実際に試してないで、勝手なこと言ってるんじゃないのか?
どうも懲りてないようだから、今後はおまえの事を監視して付け狙うしかなさそうだな。
何か起こる前に、せいぜい身近なことに気を配ってた方がいいだろう。
358:デフォルトの名無しさん
06/09/08 17:12:45
またまたワロタ
359:デフォルトの名無しさん
06/09/08 17:23:26
>355
知ってると思うけど、
int InputStream#read(byte[],int,int) は
int InputStream#read()を内部で回している使っているだけだぞ。
サブクラスで実装する人は、もっと効率が良い方法でやるとよいというだけで、
つべこべ言わずに、動作速度重視・効率も良い実装を書いてみろや!
360:デフォルトの名無しさん
06/09/08 17:25:37
>>355そりゃ、>>353の前半よりも、>>354の方が効率が良いからだろ。
これの意味が分からないけど、何を根拠にそういえるの?
361:デフォルトの名無しさん
06/09/08 17:27:57
へー、Javaのネットワークって感情で書くのか
362:デフォルトの名無しさん
06/09/08 17:29:35
逃げてばかりで
またまたワロタ
363:デフォルトの名無しさん
06/09/08 17:41:25
へー、Javaのネットワークってテイラー展開で書くのかですが、何か?
364:デフォルトの名無しさん
06/09/08 17:47:04
ストリームからのデータ読み取りはニュートン法で収束させますが何か?
365:デフォルトの名無しさん
06/09/08 18:03:27
収束ということは、零点がある保障はどこでわかるの?
366:デフォルトの名無しさん
06/09/08 18:17:37
>>364読み取りは微分できるの?
367:デフォルトの名無しさん
06/09/08 18:25:09
よっぽど悔しかったんだろうな…
368:デフォルトの名無しさん
06/09/08 18:43:38
テイラー級数?
369:デフォルトの名無しさん
06/09/08 20:30:27
今日も風俗行かないで、こっちを覗いてみたけど
いつまでも恥ずかしい奴だな
オレの代わりに、誰でもいいから奴をグーで殴ってくれないか?
370:デフォルトの名無しさん
06/09/08 22:02:49
1バイト読みはバカのやることです。
371:デフォルトの名無しさん
06/09/08 22:23:33
1ビット読みは学生はやらないことです。
372:デフォルトの名無しさん
06/09/09 02:44:55
かっこだけつけて何も作れない奴って、一番かっこ悪いんだなぁ〜
と思った。
373:デフォルトの名無しさん
06/09/09 08:57:00
>>372
お前も現状口だけだけどな。
374:デフォルトの名無しさん
06/09/09 09:41:53
とりあえずおこちゃまはAPIとドキュメントの違いくらい理解してくれ
375:デフォルトの名無しさん
06/09/09 09:59:48
>>374
お前はほんとに口だけだな。
376:デフォルトの名無しさん
06/09/09 12:12:41
ところで、彼は尻切れになる事を理解とか納得とかできたのだろうか?
377:デフォルトの名無しさん
06/09/09 12:59:07
低能、気違いの類いは放置推奨
378:デフォルトの名無しさん
06/09/09 22:08:44
風俗にも行かないで
ストレスのはけ口がない
おばちゃんたちと同じのが
どこにでもいるんだな〜
379:デフォルトの名無しさん
06/09/10 00:20:26
>>376出来なかったんじゃないの?ところで君は理解できたの?
380:デフォルトの名無しさん
06/09/10 17:43:39
>>341 readのスニペット提示ありがとうございます。
これはストリームで良く使うパターンだった事を忘れてました。
>>337 それとavailable()の提示も参考になりました。
381:デフォルトの名無しさん
06/09/10 20:57:01
available()のAPIにある
>戻り値: ブロックしないで入力ストリームから読み込むことができるバイト数
このブロックって具体的に何の事ですか?
382:デフォルトの名無しさん
06/09/10 22:36:26
URLリンク(www.google.co.jp)
383:デフォルトの名無しさん
06/09/11 00:20:37
>>382どうも!
384:デフォルトの名無しさん
06/09/11 06:37:01
でんでん!
385:デフォルトの名無しさん
06/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:デフォルトの名無しさん
06/09/11 18:16:11
でんでんだからじゃねーの
ところで、でんでんってなんだよ!
387:デフォルトの名無しさん
06/09/11 19:40:49
>>385
お前は頭わるそうだな
388:デフォルトの名無しさん
06/09/12 01:49:48
>>385
何を聞きたいの分からないんだけど、聞きたい事はそんなに大事なのか?
389:デフォルトの名無しさん
06/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:デフォルトの名無しさん
06/09/13 23:36:28
よく考えると、自分で試せばいいことでした
スマソ
391:デフォルトの名無しさん
06/09/14 01:27:29
試して分からなかったら聞けばいい
間違いを自分で認めることはエライ
392:デフォルトの名無しさん
06/09/14 01:46:44
ソケットを使って、サーバーからクライアントに0.1秒ごとにデータを送信することを考えています。
それで↓こんな感じのを書いたんですが…
while (true) {
out.writeByte(…);
out.flush();
Thread.sleep(100);
}
クライアントにデータが届くときに、0.2秒ごとに送信2回分のデータが固まって来てしまうんです。
試しに送信周期を30ミリ秒にしてみたらやっぱり0.2秒ごとに固まって来ました。
これは仕様ですか?
393:デフォルトの名無しさん
06/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:デフォルトの名無しさん
06/09/14 08:38:08
>>392
java.net.Socketのリファレンスを読んで。
TCP_NODELAYのところ。
395:392
06/09/14 22:32:57
>>394
解決しました!
ありがとうございました。
396:デフォルトの名無しさん
06/09/15 05:48:39
風俗?女?流行?
397:デフォルトの名無しさん
06/09/16 06:04:33
スニペットってC$のか?
398:デフォルトの名無しさん
06/09/16 12:02:54
リアルタイムOSでもなければ0.1秒おきに送信って厳しいなあ。
ヒント:JavaVMを含む世の中のOSのほとんどはプリエンプティブ処理。
399:デフォルトの名無しさん
06/09/16 12:13:21
>>398
引っ込め
400:デフォルトの名無しさん
06/09/16 12:16:38
RMI使ってる人いる?
EJB使ってる人は居ても
RMIをそのまま使う人に会ったことない
401:デフォルトの名無しさん
06/09/16 12:29:18
オブジェクト指向な環境では、
直接叩くより、どんどんクラスライブラリをため込んでいく流儀。
ミドルウェア書く人以外は、直接使わないのが多くても何の不思議はない。
402:デフォルトの名無しさん
06/09/16 13:08:17
JavaでP2Pのネットゲーム作るなら一番現実的なのがRMIだと思うんだけどね。
403:デフォルトの名無しさん
06/09/16 17:16:53
RMI使ってるよ。
404:デフォルトの名無しさん
06/09/16 17:37:29
ホントJAVAってお猿さん向けだなあ
405:デフォルトの名無しさん
06/09/16 18:03:31
>>404
Javaが嫌になったんですけど、どれに乗り換えればいいでしょうか?
当然ネットーワークが中心です。
406:デフォルトの名無しさん
06/09/16 19:56:39
嫌になったとか、乗り換えるとか、
そういう選択肢があるってことはホビー用途かい?
だったら別になんでもいいんじゃね?
動かなくてもいいんだし。
407:デフォルトの名無しさん
06/12/02 12:43:46
javaの代わりったって、c/c++とかたくさんあるでしょう。
tomcatとかの代用は難しいかもしれないけど
408:デフォルトの名無しさん
06/12/02 16:51:35
LISPにでもしておけ。
409:デフォルトの名無しさん
06/12/02 19:24:38
RUBYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY
410:デフォルトの名無しさん
06/12/02 19:35:08
perlwwwww
411:デフォルトの名無しさん
06/12/03 21:10:57
LimeWireの検索機能って、どーやってるんですか?
Winnyは、IPアドレスを暗号化したノードを使ってますが、
LimeWireにはそれがありません。
まさか、IPアドレスを適当に作って相手がLimeWireを起動してるかチェックなんてことはやってないだろし。
412:デフォルトの名無しさん
06/12/03 21:20:19
HTTPってクラアントの送信データを全部受け取りましたってのを特定できないの?
それともContent-Lengthが必ず付いてるのが前提だった?
生ソケットで作ってていっこうにinputを切断してこないから良く分からない。
413:デフォルトの名無しさん
06/12/04 00:04:20
1.0なら送り終わったらぶち切って良いよ。
HTTPのRFCぐらい読めよ。
414:デフォルトの名無しさん
06/12/06 16:25:11
>>412
この頃は 1.1 だからな。普通切れない。長さは content-length だ。
415:デフォルトの名無しさん
06/12/06 20:21:35
>>413
すまんね、そのうち読んでみる。
>>414
ありがとう、助かったよ。
416:デフォルトの名無しさん
06/12/07 22:51:28
chunked転送にも注意汁
417:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/02/02 23:52:48
IPアドレスやユーザーが使っているパソコンや携帯電話などを見分けて
タグを書き換えるということは可能ですか?
ケータイ空のアクセスは <mova.html>でリンク
<PC.html>からアクセスしたときだけタグを<pc.html>へ変更
おんなじページでもIPでリンク先のタグを書き換える仕様にしたいのですが
419:デフォルトの名無しさん
07/02/09 20:26:29
>>418
CGIかSSIの仕組み(あるいはSSIを利用した言語。PHPなど)を使えばできる。
JavaScript でもできないことはないかな。携帯では JavaScript は動かない
ものと考えて <noscript> に携帯用リンクを入れておくとかね。
(あ、でも、この頃はフルブラウザがあるのか)
420:デフォルトの名無しさん
07/02/09 21:14:15
なんでjavaスレで?って感じなんだけど
Strutsとかでも簡単に出来るよ
421:デフォルトの名無しさん
07/02/11 19:34:27
>>419
ケータイからのアクセス元のIPアドレスなんて、全キャリアあわせてもクラスCで数十程度だから、
ソースIPアドレス見て、初っ端からケータイ用にページ生成すればOKだと思う。
422:デフォルトの名無しさん
07/03/05 16:44:13
質問させてください。
ただいま、ソケットを使って、ローカルにあるxmlファイルを表示するHTTPサーバを作っています。
ところが、転送の途中で接続が切れてしまう現象に困っています。
転送したいxml のファイルサイズは25kBです。
はじめはperlで書いていたのですが、そのときも同じ症状に悩まされ、
chunkedすれば直るかと思い、javaに移行したのですが、それでも同じ症状がでます。
何が原因なのかわからず、困り果てている状況です。
以下に、出力まわりのコードを載せてみますので、何か気づいた事があれば、教えていただけないでしょうか。
お願いします。
423:422
07/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:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/03/05 22:55:51
chunkedなのにchunk-sizeがない?
426:422
07/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の記事を参考にしています。
URLリンク(www.javaworld.jp)
次ページ最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
4983日前に更新/153 KB
担当:undef