Android Udp通讯示例

QQ:954486673

微信:13822155058

淘宝:https://item.taobao.com/item.htm?spm=a1z10.1-c.w4004-21914722028.2.60cc6baad3thXT&id=17021194999

源码下载:https://download.csdn.net/download/zhangjin7422/18626220

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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"
    tools:context=".MainActivity">

    <androidx.constraintlayout.widget.ConstraintLayout
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        tools:layout_editor_absoluteX="3dp"
        tools:layout_editor_absoluteY="-1dp">

        <Button
            android:id="@+id/button"
            android:layout_width="120dp"
            android:layout_height="40dp"
            android:layout_marginTop="2dp"
            android:onClick="searchdiv"
            android:text="搜索在线设备"
            android:textSize="12sp"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent" />

        <TextView
            android:id="@+id/sample_text"
            android:layout_width="0dp"
            android:layout_height="25dp"
            android:layout_marginStart="20dp"
            android:layout_marginLeft="20dp"
            android:text="本设备IP :"
            app:layout_constraintBottom_toBottomOf="@+id/button"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintHorizontal_bias="0.0"
            app:layout_constraintStart_toEndOf="@+id/button" />

        <TextView
            android:id="@+id/textView3"
            android:layout_width="0dp"
            android:layout_height="400dp"
            android:layout_marginStart="1dp"
            android:layout_marginLeft="1dp"
            android:layout_marginTop="10dp"
            android:textIsSelectable="true"
            android:textSize="12sp"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintHorizontal_bias="0.0"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/button" />

        <Button
            android:id="@+id/button2"
            android:layout_width="90dp"
            android:layout_height="40dp"
            android:layout_marginTop="10dp"
            android:onClick="onclickclea"
            android:text="清空报文"
            android:textSize="12sp"
            app:layout_constraintTop_toBottomOf="@+id/textView3"
            tools:layout_editor_absoluteX="0dp" />

        <Button
            android:id="@+id/button3"
            android:layout_width="120dp"
            android:layout_height="40dp"
            android:onClick="SendOrder"
            android:text="向指定IP发送"
            android:textSize="12sp"
            app:layout_constraintBottom_toBottomOf="@+id/button2"
            app:layout_constraintStart_toEndOf="@+id/button2" />

        <TextView
            android:id="@+id/textView"
            android:layout_width="26dp"
            android:layout_height="27dp"
            android:layout_marginStart="5dp"
            android:layout_marginLeft="5dp"
            android:text=" IP:"
            app:layout_constraintBottom_toBottomOf="@+id/button3"
            app:layout_constraintStart_toEndOf="@+id/button3" />

        <EditText
            android:id="@+id/RemortIp"
            android:layout_width="186dp"
            android:layout_height="41dp"
            android:background="#FFFFFF"
            android:ems="10"
            android:inputType="textPersonName"
            android:text="255.255.255.255"
            android:textSize="14sp"
            app:layout_constraintBottom_toBottomOf="@+id/textView"
            app:layout_constraintStart_toEndOf="@+id/textView" />

        <EditText
            android:id="@+id/inputinf"
            android:layout_width="419dp"
            android:layout_height="160dp"
            android:layout_marginStart="4dp"
            android:layout_marginLeft="4dp"
            android:layout_marginTop="12dp"
            android:background="#FFFFFF"
            android:ems="10"
            android:gravity="start|top"
            android:inputType="textMultiLine"
            android:maxLines="10"
            android:textSize="12sp"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/button3" />

    </androidx.constraintlayout.widget.ConstraintLayout>

</androidx.constraintlayout.widget.ConstraintLayout>
package com.example.myapplication;

import androidx.appcompat.app.AppCompatActivity;

import java.text.SimpleDateFormat;
import java.util.Date;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;
import java.net.*;
import java.util.*;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;

public class MainActivity extends AppCompatActivity {
    private String Myip;
    private TextView tv;
    public TextView Recv;
    private EditText RemotIpV;
    private EditText InputstrV;

    private static int BROADCAST_PORT = 39192;
    public DatagramSocket Recsock = null;
    public boolean RecsockIsRuning;
    public  Handler MyHandler;
    public  Handler MyHandler2;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        tv = findViewById(R.id.sample_text);
        Recv= findViewById(R.id.textView3);
        RemotIpV=findViewById(R.id.RemortIp) ;
        InputstrV=findViewById(R.id.inputinf) ;
        InputstrV.setTextIsSelectable(true);
        Myip = getIP();
        tv.append(Myip+":"+Integer.toString(BROADCAST_PORT));

       if(!RecsockIsRuning){ InitRecSock(); } //初始化Sock,开启接收线程

        MyHandler = new Handler()
        {
            @Override
            public void handleMessage(Message msg)
            {    //线程内更新显示
                String text = (String) msg.obj;
                Recv.append(text);
            }
        };
    }

    public void InitRecSock(){
        try{
            if (RecsockIsRuning){Recsock.close(); }
            Recsock = new DatagramSocket(BROADCAST_PORT);
            new udpReceiveAndSend().start();
            RecsockIsRuning=true;
        } catch  (Exception e){
            Recv.append("Port err!\n\n");
            RecsockIsRuning=false;
        }
    }

    public void updatetrack(String s)  //线程内更新显示
    {
        if (Recv.getLineCount()>22){
            Recv.setText("");
        }
        Message msg = new Message();
        String textTochange = s;
        msg.obj = textTochange;
        MyHandler.sendMessage(msg);
    }

    public  void searchdiv(View view){
        new SearchDivThread().start();
    }  //搜索在线设备

    public void SendOrder(View view){
        String RemotIpStr="";
        RemotIpStr=RemotIpV.getText().toString() ;
        if(ipCheck(RemotIpStr)) {
            new SendInfThread().start();
        }else{Recv.append("IP地址错误!\n\n");}
    }

猜你喜欢

转载自blog.csdn.net/zhangjin7422/article/details/116708207