#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 предотвращает доставку входящих (интернет на устройство) пакетов.
Чтобы проверить это предположение, попробуйте выполнить это с устройством и сервером в одной локальной сети.