На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Следующие правила действуют в данном разделе в дополнение к общим Правилам Форума
1. Здесь обсуждается Java, а не JavaScript! Огромная просьба, по вопросам, связанным с JavaScript, SSI и им подобным обращаться в раздел WWW Masters или, на крайний случай, в Многошум.
2. В случае, если у вас возникают сомнения, в каком разделе следует задать свой вопрос, помещайте его в корневую ветку форума Java. В случае необходимости, он будет перемещен модераторами (с сохранением ссылки в корневом разделе).

3. Запрещается создавать темы с просьбой выполнить какую-то работу за автора темы. Форум является средством общения и общего поиска решения. Вашу работу за Вас никто выполнять не будет.
4. Не рекомендуется создавать несколько несвязанных вопросов в одной теме. Пожалуйста, создавайте по одной теме на вопрос.
Модераторы: dark_barker, wind
  
> UDP-связка
    Приветствую!

    Сення помогал другану сдать зачет. И стукнуло ему в 42 года восстановиться в институт ... :lol: Вощем не судите строго, написал на Джаве свой первый софт, друган зачет сдал на отличненько. Мож кому еще пригодится.

    Суть

    Клиент запрашивает три параметра (byte) и пересылает по UDP их серверу. Сервер принимает, считает по адовой формуле и возвращает результат (double). Реализация моя ниже:

    Сервер:

    ExpandedWrap disabled
      import java.net.*;
      import java.io.*;
      import java.util.*;
      import java.nio.ByteBuffer;
      import java.lang.Math;
       
      public class UDPServer {
        public UDPServer() {
          try {
            System.out.println("Ожидаю пакет ...");
            DatagramSocket ds=new DatagramSocket(61);
            while (true) {
              byte Data[]=new byte[3];
              DatagramPacket dp = new DatagramPacket(Data, 3);
              ds.receive(dp);                                
              int clientPort=dp.getPort();                    
              InetAddress clientAddress=dp.getAddress();      
              System.out.println("Получено:");
              System.out.println(" X = "+Data[0]);
              System.out.println(" Y = "+Data[1]);
              System.out.println(" Z = "+Data[2]);
              double X = Data[0];
              double Y = Data[1];
              double Z = Data[2];
              double Result = Math.pow(Math.abs(Math.cos(X)-Math.exp(Y)),1-2*Math.pow(Math.log(Y),2))*(1+Z+(Math.pow(Z,2)/2)+(Math.pow(Z,3)/3));
              byte Res[]=new byte[8];
              ByteBuffer.wrap(Res).putDouble(Result);
              dp = new DatagramPacket(Res, 8, clientAddress, clientPort);
              System.out.println("Отсылаю результат: "+Result);
              ds.send(dp);                                
              PrintWriter writer = new PrintWriter("the-file-name.txt", "UTF-8");
              writer.println("X = "+X);
              writer.println("Y = "+Y);
              writer.println("Z = "+Z);
              writer.println("Func = "+Result);
              writer.close();
            }
          }
          catch(Exception exc) {  
            exc.printStackTrace();
          }
        }
       
        public static void main(String[] args) {    
          UDPServer udpServer = new UDPServer();
        }
      }


    Клиент:

    ExpandedWrap disabled
      import java.net.*;
      import java.nio.ByteBuffer;
      import java.io.Console;
       
      public class UDPClient {
        public UDPClient(String server) {
          try {
            DatagramSocket ds = new DatagramSocket();  
            byte data[]=new byte[3];
            Console console = System.console();
            data[0] = Byte.valueOf(console.readLine("Введите X: "));  
            data[1] = Byte.valueOf(console.readLine("Введите Y: "));  
            data[2] = Byte.valueOf(console.readLine("Введите Z: "));  
            DatagramPacket dp=new DatagramPacket(data, 3, InetAddress.getByName(server), 61);
            ds.send(dp);
            byte buffer[]=new byte[8];
            dp=new DatagramPacket(buffer, 8);
            ds.receive(dp);
            double Result = ByteBuffer.wrap(buffer).getDouble();
            System.out.print("Получен результат: "+Result);  
          } catch(Exception exc) {
            exc.printStackTrace();
          }  
        }
       
        public static void main(String[] args) {          //при запуске указать доменное имя
          UDPClient udpClient = new UDPClient(args[0]);   //сервера
        }
      }
    0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
    0 пользователей:


    Рейтинг@Mail.ru
    [ Script execution time: 0,0276 ]   [ 16 queries used ]   [ Generated: 29.03.24, 12:55 GMT ]