AndroidはUDPベースのLANチャット通信(完全なDemoあり)
12948 ワード
最初は、完全に実行されているDemoのダウンロードアドレスを直接示します.http://www.demodashi.com/demo/12057.html急用の皆さんに便利です.
1.開発環境
1.1開発ツール IDE:AndroidStudio 2.3 言語:java jdk1.8 最低サポート:Android 4.1以上 1.2試験環境実測:赤米4(android 6.0.1)赤米Note 5 A(android 7.1.2)テストは完璧に実行された. は、2台のAndroidデバイスが同じローカルエリアネットワーク内でUDPを介してリアルタイムのチャット通信を行うことを実現した.実測は顔文字、emojiをサポートします. は操作が簡単で、接続する必要がある相手のipアドレスを入力すると、すぐに通信できます.
2.プレゼンテーションの効果相手のIPアドレス を入力.チャットインターフェイス は、複数のチャットレコード をスライド表示することをサポートする.
3.コード実装プロセス
3.1インタフェースコード
まずチャットのインタフェースのコードを書きますチャットインターフェースは、主に従来のチャットアプリケーションを簡単に模倣するインターフェース である.の上にはTextViewベアラがすべてのチャットコンテンツを表示し、下にはコンテンツ入力ボックスと送信ボタンがあります. 図: コード: 注意:インタフェースを美しくするために、ボタンと上のチャット記録表示領域のbackgroundを設定し、フィレットバンドエッジのshapeを書いて実現し、demoコードをダウンロードして表示しました.
3.2 javaロジック実装
3.2.1 UDPベースのSocket通信
DatagramSocketによるUDPベースのSocket通信送信データ:
受信データ: Socket を閉じる
3.2.2 Manifestsインベントリファイルネットワーク関連の権限宣言: *activity以下の属性を加えると、ソフトキーボードのイジェクト時のインタフェースの圧縮とブロック提案内容入力ボックス* を避けることができます.
3.2.3 IPアドレスの正当性判断
正規表現を用いてユーザが入力したIPアドレスの正当性を判断するはjava APIのPatern,Matcherなどのクラスを利用して正規表現で実現する. 具体的にdemoをダウンロードしてソースコードを見ます.
4.Demoダウンロード
実測完璧運行のDemoダウンロードアドレス:http://www.demodashi.com/demo/12057.html
1.開発環境
1.1開発ツール
2.プレゼンテーションの効果
3.コード実装プロセス
3.1インタフェースコード
まずチャットのインタフェースのコードを書きます
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:paddingLeft="16dp"
android:paddingRight="16dp"
android:paddingTop="20dp"
android:paddingBottom="10dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="8.5"
android:background="@drawable/shape_background_content"
android:orientation="vertical"
android:padding="5dp">
<ScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/scrollView">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/tv_receive_content"
android:textSize="18sp"
android:textColor="#36b722"/>
ScrollView>
LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:orientation="horizontal"
android:layout_weight="1">
<EditText
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="8"
android:layout_gravity="center"
android:id="@+id/et_send_content"
android:background="@drawable/shape_background_et"
android:layout_marginRight="5dp" />
<Button
android:layout_width="0dp"
android:layout_weight="1.5"
android:layout_height="wrap_content"
android:text=" "
android:layout_gravity="center"
android:id="@+id/btn_send"
android:background="@drawable/selector_button"/>
LinearLayout>
LinearLayout>
3.2 javaロジック実装
3.2.1 UDPベースのSocket通信
DatagramSocketによるUDPベースのSocket通信
public void sendDataWithUDPSocket(String str) {
try {
InetAddress serverAddress = InetAddress.getByName(ipAddr);
byte data[] = str.getBytes();
DatagramPacket packet = new DatagramPacket(data, data.length ,serverAddress ,10025);
socket.send(packet);
} catch (SocketException e) {
e.printStackTrace();
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
受信データ:
public void ServerReceviedByUdp(){
DatagramSocket socket;
try {
socket = new DatagramSocket(10025);
while (true){
byte data[] = new byte[4*1024];
DatagramPacket packet = new DatagramPacket(data,data.length);
socket.receive(packet);
String result = new String(packet.getData(),packet.getOffset() ,packet.getLength());
if(!TextUtils.isEmpty(result)){
WordsEvent wordsEvent=new WordsEvent(result);
EventBus.getDefault().post(wordsEvent);
}
System.out.println(" :"+result);
}
} catch (SocketException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
public void disconnect(){
socket.close();
socket.disconnect();
}
3.2.2 Manifestsインベントリファイル
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
android:windowSoftInputMode="stateHidden|stateAlwaysHidden|stateUnspecified|adjustPan"
3.2.3 IPアドレスの正当性判断
正規表現を用いてユーザが入力したIPアドレスの正当性を判断する
4.Demoダウンロード
実測完璧運行のDemoダウンロードアドレス:http://www.demodashi.com/demo/12057.html