Androidプログラミングはローカルエリアネットワークudpブロードキャストに基づいて自動的にsocket接続を確立する方法を実現する
3680 ワード
この例では、Androidプログラミングにより、ローカルエリアネットワークudpブロードキャストに基づいて自動的にsocket接続を確立する方法について説明します.皆さんの参考にしてください.具体的には以下の通りです.
Android開発ではsocket通信がよく使われる.プロジェクトの必要性から、最近この方面の知識を研究しました.需要はwifiを通じてandroidモバイルデバイスとandroidプラットフォームのテレビ間のファイル転送と制御を実現したいことです.間違いなくこの中で必ずsocketを使って通信する必要があります.今日は2台のデバイスの握手接続方法について共有しましょう.この方法は本人の個人的な考えの実現にすぎません.参考にしてください.同じように、光栄に存じます.
SOcketを使用して通信するには、サービス側のIPアドレスを知る必要があります.私はudp局網ブロードキャストを使用して局網内のサービス側の検索を実現し、接続を確立します.以下はコード実装です.
まずクライアント:
この文書がAndroidプログラムの設計に役立つことを願っています.
Android開発ではsocket通信がよく使われる.プロジェクトの必要性から、最近この方面の知識を研究しました.需要はwifiを通じてandroidモバイルデバイスとandroidプラットフォームのテレビ間のファイル転送と制御を実現したいことです.間違いなくこの中で必ずsocketを使って通信する必要があります.今日は2台のデバイスの握手接続方法について共有しましょう.この方法は本人の個人的な考えの実現にすぎません.参考にしてください.同じように、光栄に存じます.
SOcketを使用して通信するには、サービス側のIPアドレスを知る必要があります.私はudp局網ブロードキャストを使用して局網内のサービス側の検索を実現し、接続を確立します.以下はコード実装です.
まずクライアント:
public class MainActivity extends Activity {
/* socket*/
private MulticastSocket ms;
/* */
private Button sendUDPBrocast;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
init();
}
/* */
public void init() {
setContentView(R.layout.main);
sendUDPBrocast = (Button) findViewById(R.id.send);
sendUDPBrocast.setOnClickListener(new SendUDPBrocastListener());
try {
/* socket */
ms = new MulticastSocket();
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* ,
* */
class SendUDPBrocastListener implements OnClickListener{
@Override
public void onClick(View v) {
// ,
DatagramPacket dataPacket = null;
try {
ms.setTimeToLive(4);
// IP( IP) , server IP
byte[] data = "192.168.1.101".getBytes();
//224.0.0.1
InetAddress address = InetAddress.getByName("224.0.0.1");
//
System.out.println(address.isMulticastAddress());
dataPacket = new DatagramPacket(data, data.length, address,
8003);
ms.send(dataPacket);
ms.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
以下はサービス側です.
public class MainActivity extends Activity implements Runnable {
private MulticastSocket ds;
String multicastHost="224.0.0.1";
InetAddress receiveAddress;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
try {
ds = new MulticastSocket(8003);
receiveAddress=InetAddress.getByName(multicastHost);
ds.joinGroup(receiveAddress);
new Thread(this).start();
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
@Override
public void run() {
// TODO Auto-generated method stub
byte buf[] = new byte[1024];
DatagramPacket dp = new DatagramPacket(buf, 1024);
while (true) {
try {
ds.receive(dp);
//Toast.makeText(this, new String(buf, 0, dp.getLength()), Toast.LENGTH_LONG);
System.out.println("client ip : "+new String(buf, 0, dp.getLength()));
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
これにより、モバイルデバイスが接続するローカルネットワーク内にsocketのサービス側が存在すると、サービス側はクライアントからのブロードキャストを受信し、サービス側は受信したIPを介してクライアントと接続し、制御およびファイルの伝送を行うことができる.udpブロードキャストは、ローカルネットワークの伝送速度が遅くなり、udpが信頼できないプロトコルであるため、送信されたブロードキャストサービス側が必ずしも受信できるとは限らないため、スレッド内でサービス側の応答を受信するまでブロードキャストを送信するが、ローカルネットワーク内にサービス側が存在しないとデッドサイクルに陥るため、時間制限操作を行うなど、実際には多くの論理処理が必要であることに注意してください.具体的には個人のニーズを見てみましょう.この文書がAndroidプログラムの設計に役立つことを願っています.