我有两台主机名分别为q2
和w18
的机器,我有两个简单的程序使用套接字在这两台机器之间发送一些消息。我有一个file.cfg
,其中包含ip
需要由Client.java
和Server.java
使用。
- 客户**
public class Client {
public static void main(String... C) {
try {
String filePath = "file.cfg";
String ip = "";
byte[] bytes = Files.readAllBytes(Paths.get(filePath));
ip = new String(bytes);
ip = ip.trim();
System.out.println("cfg file contains " + ip);
Socket so = new Socket(ip, 3112);
System.out.println("socket Connected. " + so.toString());
so.setSoTimeout(30000);
BufferedReader reader = new BufferedReader(
new InputStreamReader(so.getInputStream(), StandardCharsets.UTF_8));
System.out.println(reader.readLine());
} catch (Exception e) {
e.printStackTrace();
}
}
}
- 服务器**
public class Server {
public static void main(String[] args) throws IOException {
ServerSocket serverSocket = null;
try {
String filePath = "file.cfg";
String ip = "";
byte[] bytes = Files.readAllBytes(Paths.get(filePath));
ip = new String(bytes);
ip = ip.trim();
System.out.println("cfg file contains" + ip);
serverSocket = new ServerSocket(3112, 50, InetAddress.getByName(ip));
System.out.println("Server Socket is created. " + serverSocket.toString());
} catch (IOException ex) {
ex.printStackTrace();
}
Socket socket = null;
try {
System.out.println("Waiting for Accept...");
socket = serverSocket.accept();
System.out.println("Accepted...");
OutputStreamWriter localOut = new OutputStreamWriter(socket.getOutputStream());
localOut.write("Hi,");
localOut.write("Hello");
localOut.write("\n");
localOut.flush();
localOut.close();
} catch (Exception ex) {
ex.printStackTrace();
}
socket.close();
serverSocket.close();
}
}
- 文件. cfg**
10.90.50.101
# this ip will be similar in both machines
# for ref,
# 10.90.50.101 -> q2 and
# 10.90.50.102 -> w18
- 成功案例**
1.我在w18
中运行了Client
和Server
,运行良好
1.我在q2
中运行了Client
和Server
,运行良好
1.我在q2
中运行Client
,在w18
中运行服务器,运行正常
- 故障情况**
1.当我在q2
中运行Server
和在w18
中运行Client
时,根本没有创建Client
套接字。创建套接字时,客户端在一段时间后抛出以下错误。
java.net.ConnectException: Connection timed out (Connection timed out)
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
at java.net.Socket.connect(Socket.java:589)
at java.net.Socket.connect(Socket.java:538)
at java.net.Socket.<init>(Socket.java:434)
at java.net.Socket.<init>(Socket.java:211)
at Client.main(Client.java:21)
- 问题**
我看过一些ConnectException
SO的QA,但在这里,我能够实现成功场景中的第3点,但不能做同样的事情,反之亦然,这是失败场景的point 1
。
1条答案
按热度按时间eufgjt7s1#
在www.example.com中server.java,尝试替换以下代码
与
x一个一个一个一个x一个一个二个一个x一个一个三个一个