当按下按钮时,如何从Android应用程序向节点红色的UDP侦听器发送硬编码字符串?
概述 我正在使用Android Studio制作一个应用程序,按下一个按钮,它会向我笔记本电脑上运行的Node Red中的UDP侦听器发送一个字符串,Node Red会过滤任何传入的内容,功能节点会执行它们的操作。此应用程序将在局域网内工作,而不是通过internet 到目前为止,我已经创建了一个带有空活动的新项目,而我的activity_main.xml有一个按钮。用户无需输入字符串/文本,因此按钮按下代码将具有“字符串”和节点红色侦听器IP和端口硬编码 也不需要从笔记本电脑/节点红色端收到回复,因此按钮按下应该是一个火灾和忘记硬编码消息,因此是UDP,而不是TCP套接字 问题 当按下按钮到节点红色的UDP侦听器时,MainActivity需要什么代码来发送字符串当按下按钮时,如何从Android应用程序向节点红色的UDP侦听器发送硬编码字符串?,android,udp,Android,Udp,概述 我正在使用Android Studio制作一个应用程序,按下一个按钮,它会向我笔记本电脑上运行的Node Red中的UDP侦听器发送一个字符串,Node Red会过滤任何传入的内容,功能节点会执行它们的操作。此应用程序将在局域网内工作,而不是通过internet 到目前为止,我已经创建了一个带有空活动的新项目,而我的activity_main.xml有一个按钮。用户无需输入字符串/文本,因此按钮按下代码将具有“字符串”和节点红色侦听器IP和端口硬编码 也不需要从笔记本电脑/节点红色端收到回
我花了很长时间在互联网上搜索答案,并尝试了许多代码示例,但它们都不起作用。我看到的很多研究都是关于UDP接收问题的人,但我无法理解他们发送UDP的代码 我终于通过大量的尝试和错误解决了这个问题。。。如果任何其他人遇到相同问题,请参阅下面的代码:
//On button press the message is sent via UDP
findViewById(R.id.btSendMessage).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int txnumber = Integer.parseInt(((TextView) findViewById(R.id.transmitnumber)).getText().toString());
String data = ((TextView) findViewById(R.id.texttosend)).getText().toString();
int port = Integer.valueOf(((TextView) findViewById(R.id.serverport)).getText().toString());
String address = ((TextView) findViewById(R.id.serverip)).getText().toString();
SendData(txnumber, data, port, address);
}
});
private DatagramSocket UDPSocket;
private InetAddress address;
private int port;
public void Theaddress(InetAddress address) {
try {
this.UDPSocket = new DatagramSocket();
this.address = address;
} catch (SocketException e) {
e.printStackTrace();
}
}
public void SendInstruction(final byte[] data, final int port) {
new Thread() {
@Override
public void run() {
try {
DatagramPacket packet = new DatagramPacket(data, data.length, address, port);
UDPSocket.send(packet);
DatagramPacket packetreponse = null;
UDPSocket.receive(packetreponse);
DisplayData(packetreponse);
} catch (Exception e) {
e.printStackTrace();
}
}
}.start();
}
public void SendData(final int nbRepet, final String Sdata , final int port, final String address) {
new Thread() {
@Override
public void run() {
try {
Theaddress(InetAddress.getByName(address));
for (int i = 0; i < nbRepet; i++) {
byte[] data = Sdata.getBytes();
SendInstruction(data,port);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}.start();
}
public void ReceiveData(final int portNum) {
new Thread() {
@Override
public void run() {
try {
final int tally = 1024;
final byte[] buffer = new byte[tally];
DatagramSocket socketReceive = new DatagramSocket(portNum);
while (true) {
DatagramPacket data = new DatagramPacket(buffer, buffer.length);
socketReceive.receive(data);
DisplayData(data);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}.start();
}
public void DisplayData(DatagramPacket data) {
System.out.println(data);
}
//按下按钮时,消息通过UDP发送
findViewById(R.id.btSendMessage).setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
int txnumber=Integer.parseInt(((TextView)findViewById(R.id.transmitnumber)).getText().toString());
字符串数据=((TextView)findViewById(R.id.texttosend)).getText().toString();
int port=Integer.valueOf(((TextView)findViewById(R.id.serverport)).getText().toString());
字符串地址=((TextView)findViewById(R.id.serverip)).getText().toString();
SendData(TX编号、数据、端口、地址);
}
});
私有数据包UDPSocket;
私人地址;
专用int端口;
公共无效地址(InetAddress地址){
试一试{
this.UDPSocket=new DatagramSocket();
this.address=地址;
}捕获(SocketException e){
e、 printStackTrace();
}
}
公共无效发送指令(最终字节[]数据,最终整数端口){
新线程(){
@凌驾
公开募捐{
试一试{
DatagramPacket数据包=新的DatagramPacket(数据,数据.长度,地址,端口);
UDPSocket.send(数据包);
DatagramPacket PacketResponse=null;
UDPSocket.receive(packetreponse);
显示数据(PacketResponse);
}捕获(例外e){
e、 printStackTrace();
}
}
}.start();
}
public void SendData(final int nbRepet、final String Sdata、final int port、final String address){
新线程(){
@凌驾
公开募捐{
试一试{
地址(InetAddress.getByName(地址));
对于(int i=0;i