2015-10-30 3 views
1

Я буду реализовывать клиентское/серверное приложение на основе UDP и im новое в мире Java. Сервер реализует простой протокол подтверждения запроса по протоколу UDP. Для принятого строкового идентификатора (команды) с необязательными параметрами сервер возвращает указанный результат. Например, «thread» возвращает случайное целое число от 1 до 5, а длина возвращает случайное целое число от 5 до 25.Udp Как получить целое число с сервера?

Вопросы касаются ли я прав реализации и как я могу исправить свою проблему (длина nr равна всегда между 1 и 5). Я думаю, что моя проблема в том, что в классе сервера инструкции if не проверяются. Есть ли другой способ отправить команду на сервер, который я попробовал здесь, чтобы отправить его с отправкой строк, а затем попытаться проверить его с помощью операторов if?

и тот мой код (Server):

public class server { 

public static void main(String[] args) throws IOException, InterruptedException { 

    DatagramSocket skt; 
    try { 
     skt = new DatagramSocket(1252); 

     byte [] buffer = new byte[1000]; 

     while(true){ 
      DatagramPacket request = new DatagramPacket(buffer, buffer.length); 
      skt.receive(request); 
      String arrayMsg = new String(request.getData()); 
      System.out.println(arrayMsg); 

      //check if the client asks for threadnr 
      if(arrayMsg.equals("thread")){ 
      int threadnumber = (int) (Math.random()*5)+1; 
      String threadnum = Integer.toString(threadnumber); 
      byte [] b = threadnum.getBytes(); 
      DatagramPacket reply = new DatagramPacket(b, b.length, request.getAddress(), request.getPort()); 
      skt.send(reply);;} 

      //check if the client asks for lengthnr 
      else if(arrayMsg.equals("length")){ 
      int lengthnumber = (int) (Math.random()*25)+5; 
      String lengthnum = Integer.toString(lengthnumber); 
      byte [] b = lengthnum.getBytes(); 
      DatagramPacket reply = new DatagramPacket(b, b.length,request.getAddress(), request.getPort()); 
      skt.send(reply);}   
    }} 
    catch (SocketException e) { 
     System.out.println("UDP Port 9876 is occupied."); 
     System.exit(1); 
    }}} 

тот мой клиент:

public class client { 

public static void main(String[] args) throws UnknownHostException, IOException { 

    DatagramSocket skt = new DatagramSocket(); 
    InetAddress host = InetAddress.getByName("localhost"); 
    int serverSocket = 1252; 
    byte [] senddata = new byte [1000]; 
    byte [] getdata = new byte[1000]; 

    //thread send request 
    String th = "thread"; 
    senddata = th.getBytes(); 
    DatagramPacket requestth = new DatagramPacket(senddata, senddata.length, host, serverSocket); 
    skt.send(requestth); 

    //thread get reply 
    DatagramPacket replyth = new DatagramPacket (getdata, getdata.length); 
    skt.receive(replyth); 
    String arrayth = new String(replyth.getData()); 
    int threadnr=Integer.parseInt(arrayth.trim());   //convert thread string to int and trim it (whitespace) 
    System.out.println("Thread received " + threadnr); 

    //length send request 
    String lg = "length"; 
    senddata = lg.getBytes(); 
    DatagramPacket requestlg = new DatagramPacket(senddata, senddata.length, host, serverSocket); 
    skt.send(requestlg); 

    //length get reply 
    DatagramPacket replylg = new DatagramPacket (getdata, getdata.length); 
    skt.receive(replylg); 
    String arraylg = new String(replyth.getData()); 
    int lengthnr=Integer.parseInt(arraylg.trim());   //convert thread string to int and trim it (whitespace) 
    System.out.println("Length received " + lengthnr); 


    skt.close(); 

И все я получаю что-то вроде этого: Тема получила 3 ​​ Длина получил 1

(длина должна быть от 5 до 25, а в моем случае она никогда не больше 5)

ответ

0

Код анализирует ответ от первого сообщения, а не от последнего, так что вы получаете случайный 1-5. Я предлагаю использовать лучшие имена для переменных, и вы обнаружите проблему быстрее.

Смежные вопросы