我想重现“java.net.SocketException.Connection重置”异常。如何重现“java.net.SocketException.Connection重置”?
想知道是否有任何程序可以帮助我模拟它。我尝试了以下服务器和客户端程序,看看我是否可以模拟,但我无法得到任何异常。我正在使用java8。
服务器代码 -
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.SocketException;
import java.net.SocketTimeoutException;
public class SimpleServerApp {
public static void main(String[] args) throws InterruptedException {
new Thread(new SimpleServer()).start();
}
static class SimpleServer implements Runnable {
@Override
public void run() {
ServerSocket serverSocket = null;
try {
serverSocket = new ServerSocket(3333);
serverSocket.setSoTimeout(0);
//serverSocket.
while (true) {
try {
Socket clientSocket = serverSocket.accept();
BufferedReader inputReader = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
System.out.println("Client said :"+ inputReader.readLine());
} catch (SocketTimeoutException e) {
e.printStackTrace();
}
}
}catch (Exception e) {
e.printStackTrace();
System.out.println(" EXCEPTION " + e.getStackTrace());
}/*catch (IOException e1) {
e1.printStackTrace();
}*/ /*finally {
try {
if (serverSocket != null) {
serverSocket.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}*/
}
}
}
客户端代码 -
import java.io.IOException;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.SocketException;
import java.net.UnknownHostException;
public class SimpleClientApp {
public static void main(String[] args) {
new Thread(new SimpleClient()).start();
}
static class SimpleClient implements Runnable {
@Override
public void run() {
Socket socket = null;
try {
socket = new Socket("localhost", 3333);
PrintWriter outWriter = new PrintWriter(socket.getOutputStream(), true);
System.out.println("Wait");
Thread.sleep(20000);
//System.exit(0);
//throw new Exception("Random exception");
//socket.close();
outWriter.println("Hello Mr. Server!");
}catch (SocketException e) {
e.printStackTrace();
}catch (InterruptedException e) {
e.printStackTrace();
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
} /*finally {
try {
if (socket != null)
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
*/ }
}
}
方案1.
- 本地启动服务器程序。
- 本地启动客户端程序。
- 关闭客户端程序突然(按Ctrl C) - 我刚上 服务器程序输出 “客户说:空”
场景2.
- 启动本地服务器程序。
- 本地启动客户端程序。
- 客户端连接到服务器,然后在客户端程序正在等待关闭服务器程序时突然。仍然不例外。
有些人可以告诉我一些方法我可以产生连接重置异常,工作示例代码。
我累了你的服务器程序,但我没有得到任何异常。我甚至尝试修改它这样 '公共类AnotherServer { \t公共静态无效的主要(字串[] args)抛出异常{ \t \t尝试{ \t \t \t ServerSocket的SS =新ServerSocket的(9999) ; \t \t \t Socket s = ss.accept(); \t \t \t InputStream i = s.getInputStream(); \t \t \t i.read(); (例外e){ \t \t} catch(Exception e){ \t \t \t e.printStackTrace(); (“THE EXCEPTION”+ e.getStackTrace()); \t \t} \t} }' 但我仍是无法得到异常。我使用mac和java8 incase如果有帮助 – kalpesh
这是平台相关的。 Windows的行为就像这样。我认为Unix不会。 – EJP
这是我试过的 1.在Mac上运行的服务器程序,在Windows上运行的客户端程序,然后运行@Evgeniy Dorofeev的程序我可以在Mac上看到连接重置异常。 2.我在Windows上运行Server程序,在Mac上运行客户端程序,但没有看到连接重置异常。 我想我只是想尝试在Linux上的另一种情况来仔细检查是否有任何连接重置异常来。但我认为异常将会依赖于平台。 – kalpesh