[英]Linux server with Android client: connection timed out
我正在开发一个与用Java编程的服务器连接的android应用程序。 当我在Windows上测试服务器应用程序时,服务器和客户端正在按照编程进行通信。
现在,我将实验移至Linux Ubuntu OS。 Android应用程序(客户端)能够发送字符串,但是当Linux上的服务器尝试向Android发送字符串时,它会失败。 它需要更长的时间并出现以下错误:
Testing.NewJFrame$1 run
SEVERE: null
java.net.ConnectException: Connection timed out
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:339)
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:200)
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:182)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
at java.net.Socket.connect(Socket.java:579)
at java.net.Socket.connect(Socket.java:528)
at java.net.Socket.<init>(Socket.java:425)
at java.net.Socket.<init>(Socket.java:208)
at Testing.NewJFrame$1.run(NewJFrame.java:178)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:312)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:745)
at java.awt.EventQueue.access$300(EventQueue.java:103)
at java.awt.EventQueue$3.run(EventQueue.java:706)
at java.awt.EventQueue$3.run(EventQueue.java:704)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:715)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:91)
这是服务器端的代码:
Socket clientSocket = null;
ServerSocket serverSocket = null;
String clientIP;
int port = 4447;
并根据某些条件触发以下内容:
System.out.println("Attempting connect to "+clientIP+" through "+ port);
Socket socket = new Socket(clientIP, port);
System.out.println("Connection made");
OutputStream output = socket.getOutputStream();
PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(output)), true);
out.println(appName + " has been installed and launched in Background");
System.out.println("Message sent...");
但是它停在“尝试连接......”这一行
这是客户端的代码:
public void listenToServer(){
new Thread (new Runnable(){
@Override
public void run() {
try {
serverSocket = new ServerSocket(4447);
} catch (IOException e) {
e.printStackTrace();
}
while (true) {
try {
client = serverSocket.accept();
Scanner in = new Scanner(client.getInputStream());
.
.
.
.
.
请注意,这两个代码在Windows上都可以正常工作,但在Linux Ubuntu上却不能正常工作!
我想分享几周前我发现的答案,以防有人感兴趣。
我发现问题中该错误的原因是我使用的网络配置。 我在大学办公室里工作,通过允许这种p2p通信将消息发送到本地计算机来实现某种程度的安全性,但不能反过来。 因此,我能够将消息从android发送到基本上是我的桌面的服务器。 后者通过隔离网络连接以确保一定的安全级别。
抱歉迟到了,谢谢大家分享了他们的观点
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.