スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

DataOutputStreamとかPrintStreamを使い分ける

訳もわからずStreamを選択するのは避けるべきでした。


明けましておめでとうございます。

TCP通信をjavaで書いていたら引っかかったのでブログ記事化。


先に結論:

HTTP通信を作成していた時に出力StreamをDataOutputStreamでラップしたら、こんな感じの状況になる。
BufferedReader(入力Streamをラップしたもの)が次の入力を待ち続け、ブラウザも接続を待ち続ける。
DataOutputStreamをcloseすると、ブラウザがERR_CONNECTION_RESETと愚痴る。
 (htmlに外部css,jsを仕込んだ場合など)

スレッド等を仕込むと、BufferedReader.readLn待ちでsocketがcloseし、例外する。throw-catch前提でループ回せば何とかなるが、良くない。

PrintStreamを扱うと一発解決しますよー。





サーバを立てるとき、

ServerSocet serverSocet = new ServerSocket(12345);
Socket socket = serverSocet.accept();

と書いてsocketを確保します。
socketを作成すれば入出力両方のstreamが得られるので、まるでファイルに書き込むように通信することができます。

しかし、このストリームは素では使いにくいので、より高機能なStreamクラスでラップするのですが…


HTTP通信を作成しようとしていたのですが、特に何も考えず、過去に作ったファイル転送のプログラムを流用したのが間違いでした。DataOutputStreamを使っていました。

DataOutputStreamは、バイナリファイルを扱うときに用いるようです。
PrintStreamはキャラクタを扱うときに用いる。

htmlなら後者。


あれ、でも画像を転送するときはどうするのだろうか…。


スポンサーサイト

テーマ : プログラミング
ジャンル : コンピュータ

tag : Java

コメントの投稿

非公開コメント

ブログ移転のお知らせ
ブログをshonen.hateblo.jpに移転します. 新規の記事はこちらに投稿します.
プロフィール

舞葉(ぶよう)

Author:舞葉(ぶよう)
github.io
はてなブログ(競プロ)

古い記事のソースコードは色分けしていないので、高機能テキストエディタに貼り付けたほうが見やすいかも。

検索フォーム
このブログについて
自分がつまづいた話題、なんとなく書きたいと思ったこと、ググったけど殆ど資料なかったぞオイ な話等をアップする予定。通りすがりでも、参考になっていただければと。プログラムの例外入力、メモリリークは責任負いません。投稿された記事は修正・削除する場合があります。
カテゴリ
タグ

HSP3アルゴリズムとデータ構造c++RubyJavaUnity画像解析C機械学習C#LinuxcodeIQKinectMinecraftTonyuSystemraspberrypiPythonHTML5音声制御Simulinkruby俺ルール通信制御Javascriptシミュレーション

counter-shinobi
固定記事
最新記事
最新コメント
月別アーカイブ
ブロとも申請フォーム

この人とブロともになる

アクセスランキング
[ジャンルランキング]
コンピュータ
995位
アクセスランキングを見る>>

[サブジャンルランキング]
プログラミング
199位
アクセスランキングを見る>>
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。