ChatApp

 

2人だけのチャットアプリを作りました。

サーバー側ではポート番号を指定してサーバーボタンを押します。

クライアント側ではIPアドレスとポート番号を指定して、コネクトボタンを押します。

f:id:Christopherfer:20130821012959p:plain

GUIだ!
ネットワークだ!

 

クラブの課題として出すんだったらこれで十分だろう。

 

GUIアプリを作るのに、swingの基礎みたいな記事で勉強していたが、正直なところ、自分で全部書くなんて無理、CENTER, NORTHとかあんなんで追加とか考えられない。(もっとも設置の仕方があれだけではないんだろうが・・・)

 

そこでEclipseのWindowBuilderさんに助けてもらった。

GUIでボタンやテキストエリアを設置できるのだ。これがあったから

一応は完成出来たといえる。

なんかすっごく重かったけどないよりマシだった。

 

windowbuilderのせいかどうかはわからないが、困った事があった、Eclipseの補完が全然聞かなくなっていたのである。直し方は”eclipse 補完でない” とかでしらべたらでるのでそこにまかせる。

 

windowbuilderで作ったGUIは実際のGUIとは若干違う。しかも、MacとWindowsでは結構ずれたりする。しかし、そんなものなんだろう。マルチプラットフォームの大変さがわかった。今わかった。ずれるのを防ぐために、絶対座標で設定しないんだと。

CENTERとかは、互換性を保つために存在するんだなっと認識。

 

OSによって改行コードが違うのでそれを考慮しなくてはいけない。それを解決してくれるのがSystem.getProperty("line.separator");これで改行コードを取ってこれる。

あと、Scannerクラスはクローズしたらややこしいのでクローズしてはいけない。

 

クローズするとSystem.inに終了するコードを送って次にScannerクラスを使うときにそれが邪魔する。本当に使わない時にしかScannerクラスはクローズしては駄目だ。

 

送信する部分は以前作ったものがそのまま使えた。設計の大事さを噛み締めた。

 

とにかくなんか困ったらフィールドにインスタンスを持ったら何とかなったがそんな考え方ではあとで、エントロピーが増大するので、設計はほんとうに大事。

 

macとmacとつなげるときに文字化けが起こった。原因は特定できないが、デフォルトエンコーディングが違うから?ということに落ち着いた。文字コードは必ず明示的に指定しておかないとこういうことが起こるらしい。

対処方法は、送る前の最後と受信の最初に文字コードを指定すること。

windows間とwindowsとmac間では文字化けは起こらなかったのにmac間では文字化けが起こって本当にわけが分からなかった。文字コードが無駄にいっぱいあるのは意味があるのだろうか。

Turn Chat

いきなりは理想通りにはできないのでまずはTurn式チャットの制作

 

その中で詰まったところ学んだところ。

 

kbScanner.nextInt()の恐怖 nextIntは改行コードを残したままにする

何もしないnextLine()で改行コードをクリアしよう。

 

文字列は==で比較できないequalsを使おう。

javaはmain文もよびだすことができるが設計上よろしくない

 

close()について、小規模ではclose()する必要はないらしいが

closeしましょう。

try文でインスタンス生成するとfinaly文でcloseすることはできない

>>スコープ

だからといってtry文でcloseすると、途中でExceptionをcatchした時にcloseできない

 

なのでtry文の外で初期値nullで宣言。

 

まだ問題が!!!!!!

 

初期値がnull担っているかどうかを調べないといけない

Reader,ServerSocketはnullチェックが必要

>もう一度try catch文

Writer, Scannerはチェック済み

 

closeするのは外側だけでいい

中は自動でクローズされる

 

reader = new BufferedReader(new InputStreamReader(socket.getInputStream()))

reader.close()で bufferedReaderもInputStreamReaderもsocketもぜ~んぶcloseされる

 

Closeableなクラスはクローズしよう

 

PrintWriterは溜まってから放出するのですぐに出したいときにはflush()する必要
>Streamのことを理解しようと思う。

 

GUIはトップレベルコンテナで土台を作って

中間コンテナの上にコントロールを設置する

土台、コンテナ、コントロール

frameからコンテナをつくってコントロールのインスタンスを作ってコンテナにaddしていく感じ

 

以上

ファイル送受信ソフト

チャット、ファイル送受信ができるソフト。
Skypeのファイル送受信が最近が遅いので暗号化も何もせずに直接送るものがほしい。
ファイルの送受信と、テキストチャットに特化したソフトを目指す。

 

プラットフォームはMac, WindowsでJavaを使う。


ドラッグアンドドロップでファイルを送ることができる。
クリップボードからデータの送信ができるように(Skypeと同じ機能)

サムネイル機能、送信者が画像を送るときに小さい画像を作成して受信者全員に瞬時に送る(LINE風に)

AAが崩れるのを回避する、プログラムコードをシンタックスハイライトをつけて表示できるように。

ID管理を別にサーバーで管理し、送る相手を選べるようにする。

自分宛の部屋も作れるように、メモや、自分の他のデバイスに送りたい時用。

 

チャットでは編集、削除ができるようにする。

 

 

今日から少しずつ

今日までずっとやる気なかったが、そろそろなにか始めることにした。
本当はマスタリングをもう一度読みなおそうと思ったが、本当にやる気がなかったので

楽しそうなWiresharkの本から始めてみた。

パケットキャプチャ入門改訂版、第一章と第二章と第三章の始めだけ見た。

第一章はLANアナライザーとは何か?というのが書いてあって、WiresharkはOSSのLANアナライザーなんですよーってことが書いてあった。まぁよくある感じ。第二章はインストール方法とWiresharkのインターフェイスについての解説が乗ってあった。全部は読んでないが各項目の意味が色々のってあるのでそのうち役立ちそうな感じ。本に書いてあるバージョンが古いので所々変わってたが別に困ることは無さそう。第三章はキャプチャーして、それをファイルに出力するっていう基本操作が書いてあった。無線LANカードでは別にキャプチャーソフトがいるらしいがたぶんキャプチャーできたような気がするので、バージョンが新しくなって対応できるようになったのだと勝手に思ってる。困ったらまた考える。

最初にWiresharkを起動したとき本当に意味がわからなかったけどこの本をひと通りやればなんとなく意味は分かりそう、信じてやって見ることにする

明日からはもっと早起きしよう。。。