我正在建立一个带套接字的客户端/服务器对来来回发送和接收数据。当我在我的互联网上使用两台独立的客户端/服务器机器时,它可以正常工作。传输数据等等。
然而,今天当我在当地一家咖啡店工作时(如果相关的话,是第二杯),这不起作用。我不断收到以下错误:连接超时或没有主机路由。
以下是相关代码:
服务器:
public class TestServer {
public static void main(String[] args) throws Exception {
TestServer myServer = new TestServer();
myServer.run();
}
private void run() throws Exception {
ServerSocket mySS = new ServerSocket(9999);
while(true) {
Socket SS_accept = mySS.accept();
BufferedReader myBR = new BufferedReader(new InputStreamReader(SS_accept.getInputStream()));
String temp = myBR.readLine();
System.out.println(temp);
if (temp!=null) {
PrintStream serverPS = new PrintStream(SS_accept.getOutputStream());
serverPS.println("Response received");
}
}
}
}
客户:(相关部分)
//sends a command to the server, and returns the server's response
private String tellServer(String text) throws Exception {
mySocket = new Socket("192.168.0.XXX", 9999); //the IPv4 address
//use the socket's outputStream to tell stuff to the server
PrintStream myPS = new PrintStream(mySocket.getOutputStream());
myPS.println(text);
//the following code will get data back from the server
BufferedReader clientBR = new BufferedReader(new InputStreamReader(mySocket.getInputStream()));
String temp = clientBR.readLine();
if (temp!=null) {
return temp;
} else {
return "";
}
}
这很简单。再次,如上所述,在我的互联网上的家里它工作正常 - 只需要ipconfig,获取IPv4地址,并将其放入客户端。在带免费无线网络的咖啡厅,它不起作用。为了以防万一,我甚至摆弄了许多不同的端口。
感谢您的帮助,我是插座的新手,发现这令人困惑。
答案 0 :(得分:2)
192.168.x.y是本地地址。 source
当INTERNET看到它时,您需要家用机器的IP地址。
下次回家时,请转到http://www.whatismyip.com/,看看它是什么意思。
请注意,您可能需要进入路由器并将流量从路由器路由到您的机器以获取端口9999,因为这是您可能会遇到的情况。
答案 1 :(得分:1)
当您在同一台计算机上同时运行服务器和客户端时,可以在咖啡店外面使用环回地址127.0.0.1。
使用环回地址并在一台机器上运行服务器和客户端应始终工作,无论是在家还是在外。
您可以按照Total的建议检查您的IP地址,但只有拥有静态IP才能保持不变。如果您不确定您是否拥有静态或动态IP地址,您可能拥有动态IP地址,但是您应该在一周左右的时间内检查您的IP地址几次以观察任何更改。
另一种选择是考虑免费的DNS服务器,例如http://freedns.afraid.org/,设置一项工作,定期使用该服务更新您的IP地址,并使用您选择访问本地服务器的任何域名。
使用远程访问家庭网络的任何一种方法,您都需要将9999的流量转发到家庭网络上的相关计算机。
HTH:)