0
我在java中實現了一個能夠處理多個客戶端的echo服務器。即使在運行多個客戶端時,一切都可以在本地運行。但是當試圖在另一臺計算機上運行客戶端時,我們得到Java回聲服務器連接超時問題
java.net.ConnectException: Connection timed out: connect
輸出中。所以我的問題是,這可能是什麼原因造成的?這是我第一次使用服務器,而且我有點迷路。
端口號爲1100.
以下是服務器的類。
ThreadedEchoServer:
import java.net.*;
import java.io.*;
public class ThreadedEchoServer {
public static void main(String[] args) throws IOException {
if (args.length != 1) {
System.err.println("Usage: java ThreadedEchoServer <port number>");
System.exit(1);
}
int portNumber = Integer.parseInt(args[0]);
boolean listening = true;
try (ServerSocket serverSocket = new ServerSocket(portNumber)) {
while (listening) {
new EchoThread(serverSocket.accept()).start();
System.out.println("connected");
}
}catch (IOException e) {
System.err.println("Could not listen on port " + portNumber);
System.exit(-1);
}
}
}
EchoThread:
import java.net.*;
import java.io.*;
public class EchoThread extends Thread {
private Socket socket = null;
public EchoThread(Socket socket) {
super("EchoThread");
this.socket = socket;
}
public void run() {
try (
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
BufferedReader in = new BufferedReader(
new InputStreamReader(
socket.getInputStream()));
) {
String inputLine, outputLine;
while ((inputLine = in.readLine()) != null) {
out.println(inputLine);
outputLine = inputLine;
if (outputLine.equals("Bye")) //If neccesassy to break using a command
break;
}
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
最後,回聲客戶:
import java.io.*;
import java.net.*;
Epublic class EchoClient {
public static void main(String[] args) throws IOException {
if (args.length != 2) {
System.err.println(
"Usage: java EchoClient <host name> <port number>");
System.exit(1);
}
String hostName = args[0];
int portNumber = Integer.parseInt(args[1]);
try (
Socket echoSocket = new Socket(hostName, portNumber);
PrintWriter out =
new PrintWriter(echoSocket.getOutputStream(), true);
BufferedReader in =
new BufferedReader(
new InputStreamReader(echoSocket.getInputStream()));
BufferedReader stdIn =
new BufferedReader(
new InputStreamReader(System.in))
) {
String userInput;
while ((userInput = stdIn.readLine()) != null) {
out.println(userInput);
System.out.println("echo: " + in.readLine());
}
} catch (UnknownHostException e) {
System.err.println("Don't know about host " + hostName);
System.exit(1);
} catch (IOException e) {
System.err.println("Couldn't get I/O for the connection to " +
hostName);
System.exit(1);
}
}
}
任何防火牆存在? – Smutje 2014-10-03 19:36:15
我們都關閉了我們的防火牆。 – user2833297 2014-10-03 19:37:05
但你們都在同一個本地網絡?你沒有通過互聯網與他連接嗎?爲了使這項工作通過互聯網嘗試將它與一個VPN客戶端,如hamachi – user2504380 2014-10-03 20:01:33