отправка данных с Android на udp-порт в web server2008

#android

#Android

Вопрос:

я хочу отправить данные (широту и долготу) на веб-сервер (Windows server 2008), IP-адрес и udp-порт которого известны из моего приложения для Android.как это сделать? вот пример кода, который я пытаюсь, но данные не поступают на другой конец

открытый класс UDPServer расширяет активность {

  WebView  view;

 @Override

  public void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState) ;


    setContentView(R.layout.main);

    view=(WebView) findViewById(R.id.webView1);

     try {
        String serverHostname = new String ("ip and udp port");

   BufferedReader inFromUser = 

    new BufferedReader(new InputStreamReader(System.in)); 

      DatagramSocket clientSocket = new DatagramSocket(); 

      InetAddress IPAddress = InetAddress.getByName(serverHostname); 

     System.out.println ("Attemping to connect to "   IPAddress   
                          ") via UDP port 7777");

      byte[] sendData = new byte[1024]; 
      byte[] receiveData = new byte[1024]; 

      System.out.print("Enter Message: ");

     String sentence = inFromUser.readLine(); 
      sendData = sentence.getBytes();         

   Log.i("send","send");

      System.out.println ("Sending data to "   sendData.length   
                          " bytes to server.");
      DatagramPacket sendPacket = 

       new DatagramPacket(sendData, sendData.length, IPAddress,7777); 

      clientSocket.send(sendPacket); 

      DatagramPacket receivePacket = 

   new DatagramPacket(receiveData, receiveData.length); 

      System.out.println ("Waiting for return packet");

   clientSocket.setSoTimeout(10000);

      try {
           clientSocket.receive(receivePacket); 

     String modifiedSentence = 
               new String(receivePacket.getData()); 

           InetAddress returnIPAddress = receivePacket.getAddress();

           int port = receivePacket.getPort();

           System.out.println ("From server at: "   returnIPAddress   
                               ":"   port);
           System.out.println("Message: "   modifiedSentence); 

          }

        catch (SocketTimeoutException ste)

         {
           System.out.println ("Timeout Occurred: Packet assumed lost");
          }

      clientSocket.close(); 

  }
   catch (UnknownHostException ex) { 

 System.err.println(ex);
    }
   catch (IOException ex) {

 System.err.println(ex);
    }
  }
  

Ответ №1:

В UDP, в отличие от TCP, соединение не установлено. Каждый UDP-пакет отправляется сам по себе.

Я предполагаю, что вы можете отправить UDP-пакет на сервер, но вы не получите обратный пакет. Причиной этого является NAT, который используется на всех домашних маршрутизаторах и сотовых сетях. NAT предотвращает доставку входящих (интернет на устройство) пакетов.

Чтобы проверить это предположение, попробуйте выполнить это с устройством и сервером в одной локальной сети.