Androidがネットワーク接続を実現(二)——java.netローミング


C++と比較すると,JAVAのネットワークプログラミングにおける優位性は言うまでもない.当初はMFCのネットワーク面での苦痛を学びたいと思っていたが、今はjavaを見ている.Netパッケージの中のクラスは、ずっと楽になりました.C++ネットの方面でみんなに1つのとても良いオープンソースプロジェクトPOCOライブラリを推荐することができて、このライブラリはネットの方面の机能は使うことしかできません:それはかなり强大で、兴味のあるのは学ぶことができます.
Androidがネットワークを実現(一)--package説明編幅中では、Androidネットワークに関するパッケージを簡単に紹介し、javaをローミングしました.Netパッケージは、ネットワークの知識に基づいてjavaネットワークのプログラミングを徐々に学び、いくつかの小さな例を紹介し、勉強しながらコードを書きます.
まず、IPアドレス
IPアドレスはみんなが知っていると思います.javaを直接見に来ます.Netのクラスですね.
 
詳しくはあまり話さないが、2つの簡単な例を見ると以下のようになる.
String GetHostAddress (String strHostName)
{
InetAddress address = null;
try
{
address = InetAddress.getByName (strHostName);
}
catch(UnknownHostException e)
{
System.out.println(e.getMessage());
}
return InetAddress.getHostAddress () ;
}

void GetAllIP (String strHostName)
{
InetAddress[] add = null;
try
{
add = InetAddress.getAllByName (strHostName);
for(int i=0;i<addr.lenth;i++)
System.out.println(addr[i]);
}
catch(UnknownHostException e)
{
System.out.println(e.getMessage());
}
}
 
上の2つの小さな例は簡単ですが、説明しなければならないことがあります.ネットプログラミングを書く上で、異常な捕獲に注意しなければなりません.ネット異常は比較的正常な現象です.例えば、現在のネットが忙しくて、ネット接続がタイムアウトして、もっと「日常茶飯事」です.そのため,ネットワークプログラミングを書く際には,異常をキャプチャする良い習慣を身につけ,関数の説明を見た後,ネットワーク異常の説明に注意しなければならない.たとえば、次の図の説明です.
getByAddress()関数を使用する場合は、UnknownHostExceptionという例外をキャプチャする必要があります.
そして、URLアドレス
このクラスを見ると、MFCのネットワークプログラミングの複雑さを思い出すだけでなく、
BOOL AFXAPI AfxParseURL(LPCTSTR pstrURL, DWORD& dwServiceType,CString& strServer, CString& strObject, INTERNET_PORT& nPort);
関数は、説明が分からないように見えますが、MFCネットワークのプログラミングを書くときは自分でURLクラスを書くのが一般的ですが、JAVAでは直接提供されているので、初心者にはわかりやすく見えます.簡単な例は次のとおりです.
Void EasyURL (String strURL)
{
URL url = new URL(strURL);
try
{
InputStream html = url.openStream ();
int c;
do{
c= html.read();
cf(c!=-1) System.out.println((char)c);
}while(c!=-1)
}
catch(IOException e)
{
System.out.println(e.getMessage());
}
}
 
 
次に、ソケットソケットソケットクラス
ソケット通信の基本思想は比較的に簡単で、クライアントはサーバーへのリンクを確立し、接続が確立されると、クライアントはソケットにデータを書き込み、サーバーにデータを送信することができる.逆に,サーバはクライアントがソケットに書き込むデータを読み出す.ほとんどそのように簡単で、細部は複雑かもしれませんが、基本的な考えはこのように簡単です.簡単な例を挙げてみましょう.
void WebPing (String strURL)
{
try
{
InetAddress addr;
Socket sock = new Socket(strURL,80);
Addr = sock.getInetAddress ();
System.out.println(“Connceted to”+addr);
Sock.close();
}
catch(IOException e)
{
System.out.println(e.getMessage());
}
}
 
 
ローカルホスト(localhost)を使用してこのプログラムをテストした場合、Conceted to localhost/127.0.0.1 InetAddress.toString()の暗黙呼び出し(println呼び出し)はホスト名とIPアドレスを自動的に出力します.
他のソケットについては、DatagramSocket(UDP通信によるソケット)、MulticastSocket(マルチキャスト用ソケット)、およびサーバSocket(クライアントからの接続を傍受するソケット)については、ここでは説明しない.
最後に、URLConnctionクラス
一般的には、URLというクラスは私たちのニーズを満たすことができますが、HTTPデータヘッダの転送などの特殊な状況では、次の図のようにURLConnctionを使用する必要があります.
URLConnctionを使用すると、ネットワークの制御が大幅に増加します.例を挙げると、次のようになります.
void SendRequest (String strURL)
{
URL url = URL(strURL);
HttpURLConnection conn = (HttpURLConnection)url.openConnection ();
conn.setDoInput (true);
conn.setDoOutput (true);
conn.setRequestProperty (“Content-type”,”application/xxx”);
conn.connect ();
System.out.println(Conn.getResponseMessage ());
InputMessage is = Conn.getIputStream();
int c;
do{
c = is.read();
if(c!=-1) System.out.println((char)c);
}while(c!=-1)
}
 
 
HTTPデータヘッダの知識については、この間、ストリーミングメディアのダウンロードを作成する際にHTTPデータヘッダの構造を学びました.以下に、HTTP request/responseの完全な流れを列挙します.興味のあるものは以下の通りです.
説明をまとめる
クラス図と具体的な例を結びつけてjava.ネットパッケージのローミングは、JAVAがネットプログラミングの面で確かに簡単だと言わざるを得ない.個人的にはJAVAのネット面での設計は私たちがネット課程で学んだ理論知識にもっと合っていると思いますが、MFCはこの面でパッケージがこんなによくなく、使うのが面倒で、初心者にとって理解しにくいです.