我正在编写一个需要从服务器接收字符串的应用程序。如果连接的IP地址是" 127.0.0.1"以下代码有效; (客户端和服务器在同一部手机上,仅用于测试目的),但如果它是真实的"手机的IP地址。
服务器:
ServerSocket echoServer = null;
String line;
DataInputStream is;
PrintStream os;
Socket clientSocket = null;
// Try to open a server socket on port 9999
try {
echoServer = new ServerSocket(1109);
} catch (IOException e) {
System.out.println(e);
}
// Create a socket object from the ServerSocket to listen and
// accept
// connections.
// Open input and output streams
try {
clientSocket = echoServer.accept();
is = new DataInputStream(clientSocket.getInputStream());
os = new PrintStream(clientSocket.getOutputStream());
// As long as we receive data, echo that data back to the
// client.
os.println("Das ist ein Test immernoch");
publish("Fertig");
} catch (IOException e) {
publish("Fertig");
} catch (Exception e) {
publish("Fertig");
}
客户端:
Socket smtpSocket = null;
DataOutputStream os = null;
DataInputStream is = null;
try {
smtpSocket = new Socket();
smtpSocket.connect(new InetSocketAddress("46.114.153.58", 1109), 10000); //That is the critcal line, if the IP is "127.0.0.1" everything works perfectly fine
os = new DataOutputStream(smtpSocket.getOutputStream());
is = new DataInputStream(smtpSocket.getInputStream());
} catch (UnknownHostException e) {
return "Fehler";
} catch (IOException e) {
return "Fehler";
}
if (smtpSocket != null && os != null && is != null) {
try {
os.writeBytes("HELO\n");
String s = is.readLine();
os.close();
is.close();
smtpSocket.close();
return s;
} catch (UnknownHostException e) {
//System.err.println("Trying to connect to unknown host: " + e);
} catch (IOException e) {
//System.err.println("IOException: " + e);
}
}
return "Fehler";
}
编辑:因此这是一个移动设备的应用程序,没有我可以配置的路由器。
答案 0 :(得分:1)
将此添加到您的代码中
if (Build.VERSION.SDK_INT >= 9) {
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder()
.permitAll().build();
StrictMode.setThreadPolicy(policy);
}
答案 1 :(得分:0)
如果您计划将ServerSocket与外部连接一起使用,则可能必须转发您在路由器上使用的端口。
答案 2 :(得分:0)
如果这是您的路由器的IP地址,并且您通过wifi将Android移动设备连接到路由器,那么您必须将路由器中的端口1109移植到您的移动设备。
如果这是您通过数据连接连接的Android移动设备的IP地址,那么您的数据提供商阻止端口的安全性将受到一些限制。
46.114.153.58这是一个静态IP地址还是动态的?
如果是动态IP地址,首先通过ping它来检查ip地址的可用性。