目的 諸般の事情により、RAW_SOCKを開いてL4パケットを流さないといけないことになってしまったので、その方法について簡単にまとめた。 OSI参照モデルとヘッダの構造 TCPはOSI参照モデル第4層(いわゆるL4)のプロトコルである。 このレイヤで見た場合のパケットの構造は以下の様になる。 Ethernet Header (Layer2)
TCPクライアントを実装するにはsocketライブラリのTCPSocketを使う。以下は簡単なHTTPクライアントの例である。 require 'socket' TCPSocket.open('www.yahoo.co.jp', 80){|s| s.print "GET / HTTP/1.0\r\n\r\n" print s.read } TCPSocket.openには、接続先のIPまたはホスト名と、ポート番号を指定する。ブロックには接続済みのソケットが渡される。ソケットはIOのサブクラスなので、IOと同様にprintやreadといったメソッドを使って、自由に通信することができる。ブロックを抜けるとソケットは自動的にcloseで閉じられる。 TCPSocket.openにブロックを渡さない場合は、接続済みのソケットが返される。こちらは通信が終わったら自分でTCPSocket#closeで
こんにちわ。 CrowdWorks Advent Calendar の 19日目の記事になります。 この記事ではRailsエンジニアは案外知らない人が多い、HTTP通信の基本をおさらいしてみようと思います。 HTTPとは (後で元気があれば説明を書く) っ https://ja.wikipedia.org/wiki/Hypertext_Transfer_Protocol 実際に通信しているところを見てみる (curl編) $ curl -v http://www.google.com/ * Trying 216.58.221.4... * Connected to www.google.com (216.58.221.4) port 80 (#0) > GET / HTTP/1.1 > Host: www.google.com > User-Agent: curl/7.43.0 > Acc
なるほど、最近ソケット通信、ソケット通信と言ってるのはUNIXドメインソケットの事か! UNIXドメインソケットって何がいいの? Performance Analysis of Various Mechanisms for Inter-process Communicationに素晴らしい検証があった。 It was hypothesized that pipes would have the highest throughtput due to its limited functionality, since it is half-duplex, but this was not true. For almost all of the data sizes transferred, Unix domain sockets performed better than both TCP so
Javaにはオブジェクトをバイト配列へ、またはバイト配列からオブジェクトへと変換する機能があります。この機能はシリアライズ・直列化などと呼ばれています。参考:Wikipedia, 今まで知らなかった 5 つの事項: Java オブジェクトをシリアライズする場合 この機能を使用して、UDPによるソケット通信でアプリケーション間でオブジェクトデータがやりとりできたらいいなと思い、やってみました。タイトルには「Androidで」と書きましたが、Androidに依存した方法ではないのでJavaアプリケーションなら同じように使えます。 import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.ObjectInput; imp
コード例 ちょっとbit単位でギチギチにつまったUDPパケットのシリアライズ/デシリアライズな感じのコードがAndroidで必要になって、nio(New I/Oとやら)を使ってAndroidデバイス上でUDP broadcastを送信して自分で受信するテストコードを書いてみたところ、Java 6なAndroid JavaとOracleなJava 7との差だったり、UDPとTCPの差だったり、ユニキャストとブロードキャストの差だったり、ByteBufferをちゃんと理解していないあたりの罠を踏みに踏みまくって泣いたので、やっと動いたテストコードを残しておきます。 package youten.redo.udpbroadcast; import android.support.test.runner.AndroidJUnit4; import org.junit.Test; import or
ネットワークプログラミングの基礎知識 ここでは IP アドレスやポート番号、クライアントとサーバの役割などを説明し、 perl・C言語・Java などでソケット (Socket) を使った HTTP クライアントや POP3 クライアント、簡単なサーバを作成してみます。 要はネットワークプログラミングをやってみよう、ということです。 このページのサンプルプログラムは、RFC などの規格に準拠した「正しい」プログラムではありません。 また、全体的にエラー処理が不十分です (今後改善する予定です)。 あくまでも概要を理解するためのサンプルととらえてください。 もし本気でしっかりとしたクライアントやサーバを書きたいなら、このページを読んだ上で、 さらに RFC を熟読し、そして wget・Apache・ftp コマンドなどのソースを参考にしてください。 このページに間違いを見付けたら、掲示板 で
最近,慣れないJavaに悪戦苦闘しつつAndroidアプリ開発に取り組んでいます.ちょっとした習作としてIP Multicastを扱うアプリを書いてみましたので,そのご紹介をしたいと思います. AndroidでIP Multicastを扱うには まず,AndroidでIP Multicastを扱う方法を説明します. AndroidでIP Multicastを扱う方法は,通常のUDP Socketを扱う場合とほぼ同じですが,次の点が異なります. IP Multicastのパケットを受け取るために,”MulticastLock”を作成する必要がある ソケットの生成はMulticastSocketを使用する マルチキャストアドレス宛てパケットを受け取る Androidでは通常,バッテリ消費の観点からマルチキャストアドレス宛てパケットはフィルタリングされます.そのため,マルチキャストアドレス宛てパ
あるリンクのレスポンスが独自スキーマ(google play storeのmarket://など)である場合、ブラウザでそのコールバック内容を確認できません。確認したい場合は以下の手立てが考えられます。 WebViewでWebViewClient#shouldOverride(url)でURLを表示する Socket通信でリクエストの返り値を表示する このうちSocket通信はjavaのAPIとしてあり、容易に実装できます。ちょっと注意点もあるので、まとめてみました。 実装のポイント 1.ネットワークリクエストはUIスレッドから投げない 何も考えずにソケットをつくろうとすると、NetworkOnMainThreadExceptionが発生してしまいます。 UIスレッドでネットワーク通信が許可されてないからです。(Android 3.0以降) 今回はリクエストを受け取ることも考えてAsync
TCPクライアント・サーバープログラムを作成するここでは、TCP(Transmission Control Protocol)サーバーとクライアントを作成する方法の基本的な事柄について説明します。非同期処理などのさらに高度な事柄については、「TCPを利用した複数クライアント接続可能なチャットアプリケーションを作る」で説明します。 TCPサーバーはTcpListenerクラスを、TCPクライアントはTcpClientクラスを使用して作成すると、比較的簡単(といっても難しいですが)にできます。 TCPサーバーの作成サーバーは指定されたポートを監視し、クライアントの接続要求を待ちます。クライアントからの接続要求があり、これをサーバーが受け付けると、接続が完了し、切断するまでの間、データの送受信が可能となります。 早速、TCPサーバーを作ってみましょう。大ざっぱな手順は次のようになります。 Tcp
HOMMEZ(オムズ)は男性の心と身体の健康を支援し、一人でも多くの人が子供を得る幸せや男性としての喜びを享受できる社会の実現を目指しています。男性の妊活、活力にまつわる情報や商品の力で性や妊活に悩む男性が効率的に納得感を持って活動できる機会を創出します。
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く