The below code results in a timeout.
It works fine on non-Android Java. What's the matter?
//@Override
public static void run()
{
//System.out.println ( "Local Machine IP : "+addrStr.toString ( ) ) ;
HelloWorldActivity.tv.setText("Trace 1");
try
{
// Retrieve the ServerName
InetAddress serverAddr; //= InetAddress.getByName(Server.SERVERIP);
InetAddress ias[] = InetAddress.getAllByName(Server.SERVERNAME);
serverAddr = ias[0];
Log.d("UDP", "C: Connecting...");
/* Create new UDP-Socket */
DatagramSocket socket = new DatagramSocket();
/* Prepare some data to be sent. */
String strQuery="ÿÿÿÿgetservers"+" "+Server.iProtocol+" "+"'all'";
Log.d("UDP", strQuery);
//byte[] buf = ("ÿÿÿÿgetservers 68 'all'").getBytes();
byte[] buf = strQuery.getBytes();
/* Create UDP-packet with
* data & destination(url+port) */
DatagramPacket packet = new DatagramPacket(buf, buf.length,
serverAddr, Server.SERVERPORT);
Log.d("UDP", "C: Sending: '" + new String(buf) + "'");
/* Send out the packet */
socket.setSoTimeout(5000);
socket.send(packet);
Log.d("UDP", "C: Sent.");
Log.d("UDP", "C: Done.");
// http://code.google.com/p/android/issues/detail?id=2917
byte[] buffer= new byte[1024*100];
DatagramPacket receivePacket
= new DatagramPacket(buffer,
buffer.length); //, serverAddr, Server.SERVERPORT);
socket.receive(receivePacket);
HelloWorldActivity.tv.setText("TTT");
String x = new String(receivePacket.getData());
Log.d("UDP", "C: Received: '" + x + "'");
HelloWorldActivity.tv.setText(x);
} catch (Exception e) {
HelloWorldActivity.tv.setText(e.getMessage());
Log.e("UDP", "C: Error", e);
}
}
public class Server
{
/*
//public static java.lang.string SERVERIP;
public static String SERVERNAME = "monster.idsoftware.com";
public static String SERVERIP = "192.246.40.56";
public static int SERVERPORT = 27950;
public static int PROTOCOL = 68;
*/
//public static String SERVERNAME="monster.idsoftware.com";
public static String SERVERNAME="dpmaster.deathmask.net";
public static String SERVERIP="192.246.40.56";
public static int SERVERPORT=27950;
//public static int iProtocol= 68; // Quake3
public static int iProtocol=71; // OpenArena
}
Android manifest:
<?xml version="1.0" encoding="utf-8"?>
<use-permission id="android.permission.READ_CONTACTS" />
<use-permission android:name="android.permission.WRITE_SETTINGS" />
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.CALL_PHONE" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_GPS" />
<uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_ASSISTED_GPS" />
<uses-permission android:name="android.permission.ACCESS_CELL_ID" />
<uses-permission android:name="android.permission.RECEIVE_SMS" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<application
android:icon="@drawable/icon"
android:label="AAA New Application"
>
<activity android:name="HelloWorldActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
</application>
Are you testing this on the emulator or on an actual phone? If you're using an emulator you need to be aware of how networking on the emulator works. Most specifically:
Each instance of the emulator runs behind a virtual router/firewall service that isolates it from your development machine's network interfaces and settings and from the internet. An emulated device can not see your development machine or other emulator instances on the network. Instead, it sees only that it is connected through Ethernet to a router/firewall.
You'll probably need to set up port forwarding, either using the Emulator console or using the adb
command.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With