Java ネットワークプログラミング 【教えて!】 at TECH
[2ch|▼Menu]
[前50を表示]
200:199
05/10/09 11:19:41
Web製作板で探すべきでした。
あちらに質問板を見つけたので移動します。
板汚し失礼しました。m(__)m

201:デフォルトの名無しさん
05/11/06 16:07:32
Java以前にネットワークの知識がおまいらには必要だ。
ちなみにネットワーク機能の実装はCなので、Cで書かれてるのをJavaに移植するぐらいの覚悟が無いとJavaでネットワークプログラミングは勧めない。
localhostでサーバプロセス立てられない香具師とか論外。

202:デフォルトの名無しさん
05/11/06 16:18:57
age

203:デフォルトの名無しさん
05/11/07 12:41:41
>>201
さすがにそこまで脅すほどのことじゃないと思うよ。
よっぽどレアなプロトコル実装するんでもない限り。
localhostでサーバプロセスなんて、ぶっちゃけて言うと socket.accept() するだけだし。

204:デフォルトの名無しさん
05/11/09 00:05:37
天狗の隠れ里はここですか?

205:デフォルトの名無しさん
05/11/09 00:32:48
Pop3サーバに接続してメールのUIDLを取得する方法を教えてください。

206:デフォルトの名無しさん
05/11/11 08:30:59
>>205
URLリンク(java.sun.com)
URLリンク(www.faqs.org)


207:鯖男
05/11/16 18:46:52
どなたか教えてください。
マルチクライアント非対応サーバになんとしても接続したい場合

InetSocketAddress socketAddress =
new InetSocketAddress("localhost", 1234);

Socket socket = new Socket();

while ((socket.isConnected()) == false) {
try {
socket.connect(socketAddress,0);
} catch (IOException e) {
System.out.println("未接続");
}
}

のようなコードではダメなのはなぜでしょうか?


208:デフォルトの名無しさん
05/11/16 21:36:08
epollやkqueueを上手くラップして共通化したものってありますか?

209:デフォルトの名無しさん
05/12/02 21:59:07
P2Pを駆使してメッセンジャーとか上手く作れないかな?
暗号化されたキーを送信して複合できた人が繋ぎたい相手みたいな感じで。


210:デフォルトの名無しさん
05/12/04 07:39:40
現在大学3年生ですが、ネットワークプログラミングという枠組みだけで何か各自でテーマを考えろといわれました。
色々探しているのですが、なかなかこれぞとうテーマが見つかりません。
http dns dhcp ftpサーバーをプログラミングしてみたりするのも面白いと思うのですが、、
ただプログラミングするだけではありきたりだし、なぜれをしたいのかと問われれば微妙な感じです。
何か良いテーマや、ヒントなど下さればうれしいです。よろしくお願いします。


211:デフォルトの名無しさん
05/12/04 07:47:50
ネット枠対戦のゲームとか

212:デフォルトの名無しさん
05/12/04 12:22:42
Javaはなんでもできるから逆に決まりにくいだろうな。
サーバー作るとかがやっぱり定番になりそう、、。
漏れは卒業作成でdhcpサーバー作ったなぁ、、


213:デフォルトの名無しさん
05/12/04 12:26:04
echoサーバ作ってどぎもを抜かせて見せる

214:伝説新人タクシ
05/12/04 12:49:56
>>207
みんなレスしてないのはそういうことか。
そのsocketがアドレスを知らないから。

215:伝説新人タクシ
05/12/04 12:55:17
>>207 スマン。

216:伝説新人タクシ
05/12/04 13:13:59
文字折っててテンパリすぎだオレ。
>>207
ループ回す前に接続してるのかをまず表示。

217:デフォルトの名無しさん
05/12/04 13:19:50
エコーサーバーワロスwww
どうしてもこれがやりたいってものがなかったら、
やっぱりサーバープログラミングが無難でいいと思う。

218:デフォルトの名無しさん
05/12/04 13:27:13
echoサーバつくるんならさ
関西弁に直してくれるとかそういうのがいいんでない?
ネットワーク部分以外で頭使いそうだけど

219:デフォルトの名無しさん
05/12/04 16:41:20
スレが汚れたね

220:デフォルトの名無しさん
05/12/04 20:10:02
メッセンジャー作ってくれ。

221:デフォルトの名無しさん
05/12/04 20:11:49
IPMsgのJava版って無かった?
鯖がいるタイプなら作っても運用できないじゃん

222:デフォルトの名無しさん
05/12/04 20:29:10
むしろ2chブラウザ作れ
ネットワーク部分は少ないが

223:デフォルトの名無しさん
05/12/04 20:31:05
2chブラウザって誰でも作れるの?
datを公開するブラウザは2chが制限してるって聞いたけど噂だけ?

224:デフォルトの名無しさん
05/12/04 20:43:31
>>222
既にあるじゃん

225:デフォルトの名無しさん
05/12/04 20:46:42
>>223
スレリンク(tech板)

226:デフォルトの名無しさん
05/12/04 20:54:29
>>224
dhcpサーバもechoサーバも既にありますが。

227:デフォルトの名無しさん
05/12/05 04:38:24
学部の卒業作成で全く0から何かを作るなんて不可能だろ。
既にあるものを作るのがあたりまえ。何かしらオリジナルな要素があればよい。

228:210
05/12/05 06:50:25
皆さんご回答ありがとうございます。
がんばってみます、、

229:デフォルトの名無しさん
05/12/06 23:26:02
ipv6に対応したネットワークプログラムを考えているのですが・・・
JAVAのIPV6の資料はなかなかないですね
どなたかご教授ください

230:デフォルトの名無しさん
05/12/07 00:16:33
ここじゃあかんのか?
URLリンク(java.sun.com)

231:デフォルトの名無しさん
05/12/08 11:06:52
>227
オリジナルな要素って君なら例えばどうする?
サーバープログラミングなんてオリジナルの要素を加えるなんてほとんど不可能だろ。
dhcp作るにしてもdns作るにしても、市販のものやBINDを超えるものが作れるの?学生が。

232:デフォルトの名無しさん
05/12/08 11:24:31
いや、、別に超える必要は全く無いわけだが、、

233:デフォルトの名無しさん
05/12/08 11:39:14
>>231
サーバープログラミングと言って良いかどうかは判らんが
SoftEtherは学生が作った

234:デフォルトの名無しさん
05/12/08 13:38:10
この板で質問しているよな学生にはまず無理だろw

235:デフォルトの名無しさん
05/12/08 17:47:26
SoftEther 作った香具師は2chで質問しまくったはずだが

236:デフォルトの名無しさん
05/12/08 22:32:40
ひげぽんよろしく、住人のレベルを超えてしまったんだろうな。<SoftEthrerの作者

237:デフォルトの名無しさん
06/01/31 11:42:13
Javaで書かれたプロクシサーバーソフトってありますか?

238:デフォルトの名無しさん
06/01/31 12:18:09
URLリンク(www.mortbay.com)
URLリンク(www.cs.technion.ac.il)

239:デフォルトの名無しさん
06/02/01 01:43:42
初心者の質問じゃないと思うけど、WININETでサーバーサイドのJAVAを実行できますか?
その場合、クラス名とかfunction名とかパラメータの渡し方はどうすればいいんでしょうか?



240:デフォルトの名無しさん
06/02/01 02:45:55
釣られないぞー

241:デフォルトの名無しさん
06/03/21 16:30:50
マルチすみません。

URLリンク(ash.jp)
このサイトのURLConnectionのソースをaioeclipse ver2.0.0(JDKは1.5.0)で
流すとエラーが出るんですけどどうすればいいですか?
eclipseの設定かしら

java.net.ConnectException: Connection refused: connect
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.PlainSocketImpl.doConnect(Unknown Source)
at java.net.PlainSocketImpl.connectToAddress(Unknown Source)
at java.net.PlainSocketImpl.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at sun.net.NetworkClient.doConnect(Unknown Source)
at sun.net.www.http.HttpClient.openServer(Unknown Source)
at sun.net.www.http.HttpClient.openServer(Unknown Source)
at sun.net.www.http.HttpClient.<init>(Unknown Source)
at sun.net.www.http.HttpClient.New(Unknown Source)
at sun.net.www.http.HttpClient.New(Unknown Source)
at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(Unknown Source)
at sun.net.www.protocol.http.HttpURLConnection.plainConnect(Unknown Source)
at sun.net.www.protocol.http.HttpURLConnection.connect(Unknown Source)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)
at HttpUrl.main(HttpUrl.java:32)


242:デフォルトの名無しさん
06/03/22 18:51:31
気分がいいからこたえてやる。

そのプログラムは、"localhost"、つまり実行してるPCの80番ポートに
TCPで接続しようとしている。80番ポートは通常HTTPのポート。
なので、実行してるPCの80番ポートで待っているプログラムがない、
つまり、HTTPサーバが動いてないと、接続は拒否される。
それが、
> java.net.ConnectException: Connection refused: connect
ということ。
ANHTTPDでも動かしとけば、connectは成功するだろ。
ネットワークプログラムは常に通信相手があって成り立つってことを忘れるな。

243:デフォルトの名無しさん
06/03/22 20:28:55
自レスです

String proxyHost = "";
int proxyPort = 8080;
を消して
if (proxyHost == null) {
urlObj = new URL(url);
} else {
urlObj = new URL("http", proxyHost, proxyPort, url);
}
ここを

urlObj = new URL(url);

だけにしたらソースもってこれました。

urlObj = new URL("http", proxyHost, proxyPort, url);

が悪さしてたってことですか?



244:デフォルトの名無しさん
06/03/22 20:32:20
連投すみません

 String proxyHost = "";



 if(proxyHost == null)がfalseに行ってることは

上記はnullではないのですか?

nullの気がするんですが・・・



245:デフォルトの名無しさん
06/03/22 22:26:33
つjava初心者スレ

246:デフォルトの名無しさん
06/03/25 18:04:07
基本的な質問ですが、
あるノードからあるノードにデータが動くためには、
必ずsokcetクラスを使う必要があるのでしょうか?

247:デフォルトの名無しさん
06/03/26 10:35:24
>>41
Stringはサブクラスを作れないはずだが

248:デフォルトの名無しさん
06/03/27 17:19:38
dhcpはつまんねーな。
IM-IRCブリッジとかどう?
メモリリークしまくりで楽しそうだよ(w

249:デフォルトの名無しさん
06/03/27 17:47:32
>>246
ソケットがないと通信できないんだから当たり前

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()まではならないと思うのですけど。
よろしければご指導お願いします。


次ページ
最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

4983日前に更新/153 KB
担当:undef