首先要写好聊天界面的代码
- <?
- xml version=
- "1.0"
- encoding=
- "utf-8"
- ?>
- <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>
使用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();
- }
- <!-- 允许应用程序改变网络状态 -->
- <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
- <!-- 允许应用程序改变WIFI连接状态 -->
- <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
- <!-- 允许应用程序访问有关的网络信息 -->
- <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
- <!-- 允许应用程序访问WIFI网卡的网络信息 -->
- <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
- <!-- 允许应用程序完全使用网络 -->
- <uses-permission android:name="android.permission.INTERNET" />
- android: windowSoftInputMode = "stateHidden|stateAlwaysHidden|stateUnspecified|adjustPan"
使用正则表达式判断用户输入的IP地址的合法性
实测完美运行的Demo下载地址
来源: https://juejin.im/post/5a23dc4551882503dc5386f7