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");}
}