这个问题很简单,但我还没有找到解决办法(对不起,英语不好,我没有很多机会用英语写作。。。所以坏英语预期,警告)。
我有一个简单的udp java代码(客户端),它通过datagrampacket将消息发送到另一个java代码(服务器)并打印收到的消息。问题是,第一个发送的消息运行良好(它打印我发送的数据),但其他数据包从26字节转换为15字节,这不是变量的问题,也不是客户机的问题(我猜),因为当我打印数据时,我发送的消息的长度总是26(就像它应该的那样)。
这是我的密码:
客户:
import java.io.IOException; import java.net.DatagramPacket;
import java.net.DatagramSocket; import java.net.InetAddress;
import java.net.SocketException;
import java.net.SocketTimeoutException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Random;
import java.util.concurrent.TimeUnit;
public class cliente {
public static final void main(final String[] args) {
InetAddress direccion; DatagramPacket p; byte[] data = new byte[5024];
DatagramPacket recibido = new DatagramPacket(data, data.length);
while(true){
for(int i=0, k=5; i<k;i++) {
String[] SensoresId = new String[] {"001", "002", "003", "004", "005"};
try {
direccion = InetAddress.getByName("localhost"); //get local host address
//Grabbing ID of sensor
String Sen_Id = SensoresId[i];
//Taking Date of execution and hour
DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd hh:mm:ss");
Date date = new Date();
String fecha_ahora = new String(dateFormat.format(date));
//random parameter
Random random = new Random();
int numero_rand = random.nextInt(101);
String medicion = String.valueOf(numero_rand);
//joining all variables in the message to send
String mensaje = Sen_Id + "," + medicion + "," + fecha_ahora;
try(DatagramSocket client = new DatagramSocket()) {
data = mensaje.getBytes(); //allocating the data
p = new DatagramPacket(data, data.length, direccion, 9984); //create package
System.out.println("enviando la data...");//sending the data...
client.send(p); //send message
client.setSoTimeout(5000); //waiting a to a timeout
while(true) {
try {
//getting the respond message
client.receive(recibido);
String mensaje_de_vuelta = "recibiendo de:" + recibido.getAddress() + "," + "mensaje:" + new String(recibido.getData());
String respuesta = new String(recibido.getData());
System.out.println(mensaje_de_vuelta + "\n");
//Not so important code (work in process)
if(respuesta == "duplicados" || respuesta == "OK") {
break;
}
client.close(); //I tried to close the client in hope that will fix it but no
break;
}catch(SocketTimeoutException e) {
System.out.println("Se acabo tu tiempo!" + e);
client.close();
}
}
}
} catch (SocketException e1) {
System.out.println("Error en socket" + e1);
}catch (IOException e2) {
e2.printStackTrace();
}
}
try {
System.out.println("Esperando 5 segundos...");
TimeUnit.SECONDS.sleep(5);
}catch(InterruptedException ex) {
Thread.currentThread().interrupt();
}
}
}
}
服务器:
import java.io.IOException; import java.net.DatagramPacket;
import java.net.DatagramSocket; import java.net.InetAddress;
import java.net.SocketException;
public class servidor {
public static final void main(final String[] args) {
DatagramPacket p; byte[] data = new byte[5024];
try(DatagramSocket server = new DatagramSocket(9984)) {
while(true) {
p = new DatagramPacket(data, data.length); //create package
server.receive(p); //wait for and receive package
System.out.println("Se recibio tu mensaje");
//System.out.println("New message " + p.getSocketAddress());
String mensaje_cliente = new String(p.getData(),0,p.getLength());
System.out.println(p.getLength());
//Make a print to see recieve message
System.out.println(mensaje_cliente);
//Obtaining adresses
int puertoCliente = p.getPort();
InetAddress direccion = p.getAddress();
//preparing the respond
String mensaje_vuelta = "Hola como esta?";
data = mensaje_vuelta.getBytes();
DatagramPacket respuesta = new DatagramPacket(data, data.length, direccion, puertoCliente);
//sending respond
System.out.println("Enviando respuesta al cliente...");
server.send(respuesta);
}
} catch (SocketException e) {
e.printStackTrace();
} catch(IOException e1) {
e1.printStackTrace();
}
}
}
结果:
Se recibio tu mensaje
26
001,18,2020/11/18 09:35:30
Enviando respuesta al cliente...
Se recibio tu mensaje
15
002,14,2020/11/
Enviando respuesta al cliente...
Se recibio tu mensaje
15
003,36,2020/11/
Enviando respuesta al cliente...
Se recibio tu mensaje
15
004,59,2020/11/
Enviando respuesta al cliente...
Se recibio tu mensaje
15
005,84,2020/11/
Enviando respuesta al cliente...
如您所见,消息长度从26减少到15,这使得消息被一分为二<--那是我的问题。
提前感谢您的回复。
祝你有美好的一天。
暂无答案!
目前还没有任何答案,快来回答吧!