服务器套接字不听正确的IP地址
问题描述:
我已经写了一个服务器套接字活动,并在C#中的客户端。但我的C#客户端永远不会连接到android服务器。 虽然搜索我发现了这个问题。 java.net.ServerSocket.accept() doesn't return on Android服务器套接字不听正确的IP地址
我的服务器套接字正在监听ServerSocket [addr = 0.0.0.0/0.0.0.0,端口= 0,localport = 5000])而不是10.0.2.15.Kindly指引我朝着正确的方向。
private String getLocalIpAddress() {
try {
for (Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements();) {
NetworkInterface intf = en.nextElement();
for (Enumeration<InetAddress> enumIpAddr = intf.getInetAddresses(); enumIpAddr.hasMoreElements();) {
InetAddress inetAddress = enumIpAddr.nextElement();
if (!inetAddress.isLoopbackAddress()
&& InetAddressUtils.isIPv4Address(inetAddress.getHostAddress())) { return inetAddress.getHostAddress().toString(); }
}
}
} catch (SocketException ex) {
Log.e("ServerActivity", ex.toString());
}
return null;
}
public class ServerThread implements Runnable {
public void run() {
try {
if (SERVERIP != null) {
handler.post(new Runnable() {
@Override
public void run() {
serverStatus.setText("Listening on IP: " + SERVERIP);
}
});
serverSocket = new ServerSocket(SERVERPORT);
while (true) {
// LISTEN FOR INCOMING CLIENTS
Socket client = serverSocket.accept();
handler.post(new Runnable() {
@Override
public void run() {
serverStatus.setText("Connected.");
}
});
try {
BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream()));
String line = null;
while ((line = in.readLine()) != null) {
Log.d("ServerActivity", line);
handler.post(new Runnable() {
@Override
public void run() {
}
});
}
break;
} catch (Exception e) {
handler.post(new Runnable() {
@Override
public void run() {
serverStatus.setText("Oops. Connection interrupted. Please reconnect your phones.");
}
});
e.printStackTrace();
}
}
} else {
handler.post(new Runnable() {
@Override
public void run() {
serverStatus.setText("Couldn't detect internet connection.");
}
});
}
} catch (Exception e) {
handler.post(new Runnable() {
@Override
public void run() {
serverStatus.setText("Error");
}
});
e.printStackTrace();
}
}
}
答
移动设备作为服务器工作的可能性取决于您的移动互联网提供商的防火墙配置。通常这是禁用的。只有在通过无线而不是移动宽带连接设备时,此类连接才有效。
0.0.0.0无论如何都是无效地址。尝试获取主机地址时忽略它。
我想在我的模拟器上测试这个应用程序!无论如何要完成这件事? – Desire 2013-04-27 16:59:36
0.0.0.0不是'无效地址'。 – EJP 2013-04-27 21:32:53
它用于指定指定无效,未知或不适用的目标,且不可路由。 – h22 2013-04-28 09:48:58