android połączenie UDP, nie odbiera żadnych danych
Jestem nowicjuszem, więc proszę, uciekaj mnie, jeśli zadam głupie pytania.
Próbuję nawiązać połączenie UDP między emulatorem komputera Eclipse a telefonem z Androidem
(lub między dwoma urządzeniami z telefonem z Androidem).
mamrouter a telefon łączy się z siecią Wi-Fi routera internetowego. Komputer jest również w tej samej sieci (bezpośrednie połączenie z routerem kablowym-komputerem). Próbuję wysłać niektóre dane tekstowe z wątku serwera do wątku klienta, ale nic nie zostało odebrane / wysłane. :(
Theserwer klasa java (ODCZYTAŁ, serwer otrzymuje wiadomość. od klienta):
<code>public class server implements Runnable { // the Server's Port public static final int SERVERPORT = 6000; // running Server thread. public void run() { Log.d("redwing","server thread started."); DatagramSocket serverSocket = null; try { // Open Server Port serverSocket = new DatagramSocket(server.SERVERPORT); byte[] receiveData = new byte[32]; byte[] sendData = new byte[32]; // loop until "server_finished" becomes False. while(createserver.server_finished) { if(renderer.gGL!=null) // ignore me, just a null pointer checker { // waiting for the incoming client's message packet DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length); serverSocket.receive(receivePacket); renderer.recv = new String(receivePacket.getData()); Log.d("server","packet received from client, ETA " + timing.getNow() + " " + renderer.recv); // timing getNow - just returns current system minute & second. // server is replying to the client back with a message. InetAddress IPAddress = receivePacket.getAddress(); int port = receivePacket.getPort(); sendData = new String("server msg").getBytes(); DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, IPAddress, port); serverSocket.send(sendPacket); renderer.sent = new String(sendData, 0, sendData.length); Log.d("server","packet sent to client, ETA " + timing.getNow() + " " + renderer.sent); // timing getNow - just returns current system minute & second. } } // close the socket if(serverSocket!=null) serverSocket.close(); serverSocket = null; } catch (Exception e) { Log.e("server", "Error", e); if(serverSocket!=null) serverSocket.close(); serverSocket = null; } finally { if(serverSocket!=null) serverSocket.close(); serverSocket = null; } Log.d("redwing","server thread terminated."); } } </code>
iKlient klasa java (RE-EDITED, Klient nie otrzymuje wiadomości z serwera):
<code>public class client implements Runnable { public static final int CLIENTPORT = 5000; // running Client thread. public void run() { Log.d("redwing","client thread started."); DatagramSocket clientSocket = null; try { // getting local address clientSocket = new DatagramSocket(server.SERVERPORT); InetAddress IPAddress = InetAddress.getByName("192.168.0.100"); // displaying IP & hostname. Log.d("client", "IP: " + IPAddress.getHostAddress() + " Name: " + IPAddress.getHostName()); byte[] sendData = new byte[32]; byte[] receiveData = new byte[32]; // Loop until client_finished becomes False. while(createclient.client_finished) { if(renderer.gGL!=null) // ignore me, just a null pointer checker { // sending a message to the server sendData = timing.getNow().getBytes(); DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, IPAddress, client.CLIENTPORT); clientSocket.send(sendPacket); renderer.sent = new String(sendData,0,sendData.length);; Log.d("client","packet sent to server, ETA " + timing.getNow()); // waiting for the server packet message. DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length); clientSocket.receive(receivePacket); renderer.recv = new String(receivePacket.getData()); Log.d("client","packet received from server, ETA " + timing.getNow()); } } // close the socket if(clientSocket!=null) clientSocket.close(); clientSocket = null; } catch (Exception e) { Log.e("client", "Error", e); if(clientSocket!=null) clientSocket.close(); clientSocket = null; } finally { if(clientSocket!=null) clientSocket.close(); clientSocket = null; } Log.d("redwing","client thread terminated."); } } </code>
Zezwolenia są włączone w manifeście:
<code><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.INTERNET"/> <user-permission android:name="android.permission.NETWORK" /> <uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> </code>
Używam serwera na emulatorze komputera z systemem Android, a klienta na telefonie z Androidem.
Zarówno wątki klienta, jak i serwera działają dobrze, ale ... problem polega na tym, że nie otrzymuję żadnych danych wymienianych między nimi. Theklient nie otrzymuje adnotacji, a serwer nic nie otrzymuje. Pakiety są wysyłane, ale nic nie odbierane.
Co robię źle?
Proszę pomóż mi.
Z góry dziękuję.