カテゴリー
未分類

Javaのソケット通信の切断を検知

ものすごく久々にJavaのコードを書いた。

コードを書いたのは大学の上級プログラミング(笑)以降かな。

 

まずは以下をご覧ください。(解像度が高すぎて文字が小さすぎるため、HD以上でご覧ください)

複数人のクライアントを扱うまでは簡単。

しかし問題なのはクライアントとの切断が検知できないため、切断してもその人のソケット変数が残ってしまう。

今回はそれを検知し、クローズしたソケットを自動的に削除するようにした。

ここで紹介するのは切断の検知方法だけにしておく。

 

あ、先に言っておくと、isClosed()やisConnected()では検知できません。

接続したらisConnectedがTrueに。close()により切断されたソケットはisClosed()でtrueが買えるようになっていて、接続状態を確認するものではありません。

サーバーと接続したクライアントアプリケーションが異常終了やCloseを使わずに切断された場合の検知は以下のように行うことができます。(かなり非効率ですが)

 

まずメインでデータのやり取りを行うソケット以外にもう一つ別のポートで通信状態をチェックします。

ソケット接続が確立したらソケットを閉じる。接続にはsetSoTimeoutで一定のタイムアウト時間を設定しておく。

これをループすることでクライアントが接続可能な状態かどうかを判断することができます。

タイムアウトしなければソケットを確立した瞬間破棄し、再接続を試します。

タイムアウトした場合そのネットワークは切断されているということが言えます。

 

クラスにまとめてDropBoxにアップロードしておきます。JavaDocはそのうち書きます。

これはもちろんサーバーサイド用とクライアントサイドで分ける必要があります。

両方とも、新しくオブジェクトをnewした瞬間から動作します。

 

サーバー側のファイル(ServerConnectionCheck)

void ServerConnectionCheck(String host, int port) //コンストラクタ

boolean isConnecting() //接続しているかどうか

void close() //終了

クライアント側のファイル(ClientConnectionCheck)

void ClientConnectionCheck(String host, int port) //コンストラクタ

void close() //終了

 

リンク切れの場合はご報告ください。

カテゴリー
未分類

会議通話しながらのゲームのライブ配信環境を作る

ゲームなどの配信をしてみたい、またはしたことがあるという方で自分の声を入れることができなかったり、会議通話しながらの配信ができないなどで困っている方がいると思います。

今回はその改善をするための簡単な手段を紹介。

コストとしては3000円程度が必要になります。(何も持っていない場合)

 

用意するもの

・ステレオミニプラグの差込口を分岐するやつ
・USBマイクのマイク部分が取り外せるやつ(これとか
・ステレオミニプラグケーブル

この三つが用意できたら、ステレオミニプラグの分岐するやつをパソコンのスピーカー端子に接続。

二つ差込口ができるから片方はそのままスピーカーをつなぐ。

もう片方にステレオミニプラグケーブルを接続し、USBマイクからマイクを取り外しそこに繋げる。

そうしたら、USBケーブルをPCに接続すればおk。

Windowsの標準入力をそのUSBマイクに設定し、Skypeのマイクはそのままサウンドカードや、オンボードチップの入力を使う。

そして設定でマイク入力をスピーカーから出すようにする。設定が難しいけどうまくやればハウリングはしない。

もしハウリングの問題が解決できないならスピーカーからの出力はやめ、ヘッドフォンを使う。

複数人でオンラインゲームやってても実況プレイができる。

カテゴリー
未分類

jQueryでiFrameを扱う

jQueryでiFrameを扱うのは意外と難しい。

コードで説明すると

<html>
<head>
<script src=”http://code.jquery.com/jquery-1.6.min.js”></script>
<script>
$(function(){

    //————————————–方法1
    $ifr = $(“<iframe id=’ifr’></iframe>”);
        //この段階ではIframeの内容は存在しない。

    $(“body”).append($ifr);
        //ここでIframeがロードされる。

    document.getElementById(“ifr”)
        .contentWindow
        .document.write(“<html><head></head><body></body></html>”);
        //これを書かないとGoogle Chrome以外は動作しない。

    $(“#ifr”).contents().find(“body”).append(“hoge”);
        //Ifrの内容に”hoge”を追加。

    //————————————–方法2
    $ifrObj = $(“<iframe></iframe>”).appendTo(document.body);
    $ifrObj.contents().ready(function(){
      $ifrObj.contents().find(“body”).append(“<div>hoge</div>”);
    });

});
</script>
</head>
<body>
</body>
</html>

jQuery自体はクロスブラウザ対策用に使えるかもしれないが、IfrのロードはChromeだと自動的にHTMLタグ、HEAD、Bodyが追加されているが、それ以外のブラウザだとReadyに時間がかかるか初期状態が空白のため検索ができない。

一応対処はこれぐらいかな。

たぶん方法2のほうが楽。

カテゴリー
未分類

EMBEDを非表示で再生する

ただiframeの中にEmbedを書き込みIframeを非表示にするだけ。

これで怪しいサイト作れちゃうね。Iframeって恐ろしい。

まぁそんなものよりもYoutubeなんかの動画をBGMとして使うには活用できそう。

結構面倒かもしれないけど、スクリプトも加えれるしね。

 

一応コード。面倒だからdocument.writeで書いちゃってます。

<iframe
    name=”test”
    width=”100%” height=”100%”
    style=”display:none;”>
</iframe>
<script>
test.document.write(“
    <embed
      src=’http://www.youtube.com/v/IGiYYIi-H8k?autoplay=1′
      width=’100%’ height=’100%’
      type=’application/x-shockwave-flash’
      allowscriptaccess=’always’
      allowfullscreen=’true’
      style=’padding:0px;margin:0px;’>
    </embed>”
);
</script>

カテゴリー
未分類

クロスドメインでJSを実行する方法

JSWOS(JavaScript Web OS)を作っていて思いついた。

どうやったらクロスドメインでデータを取得できるのか。

function crossDomainJS(url){
    $(“<script src='”+url+”‘></script>”)
        .bind(“onload”,function(){$(this).remove();})
        .appendTo(“head”);
}

これでcrossDomainJS()のパラメタにクロスドメインのJSのURLを入れても大丈夫。

これは引数でURLのJSファイルを実行し、読み込み完了時に要素を自動的に削除するというものです。

これでレンタルサバをJSモジュールの倉庫にできる。(大体のところでは規約違反になります)