Java 为什么下面的代码会出现异常?
客户端类Java 为什么下面的代码会出现异常?,java,Java,客户端类 import java.io.PrintWriter; import java.net.Socket; public class Client { public static void main(String[] args) { try { System.out.println(" Starting Client "); Socket socket = new Socket ("lo
import java.io.PrintWriter;
import java.net.Socket;
public class Client
{
public static void main(String[] args)
{
try
{
System.out.println(" Starting Client ");
Socket socket = new Socket ("localhost",55555);
PrintWriter printWriter = new PrintWriter(socket.getOutputStream(),true);
printWriter.println("Hello from client");
printWriter.println("Conected, Yes!");
socket.close();// Changes as suggested by Jack
}
catch (Exception e)
{
System.out.println(e);
}
}
}
服务器类
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;
public class Server
{
public static void main(String[] args)
{
System.out.println(" inside main ");
try
{
System.out.println("Starting Server");
ServerSocket serverSocket= new ServerSocket(55555);
Socket clientSocket = serverSocket.accept();
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
String inputLine;
while ((inputLine= bufferedReader.readLine())!=null)
System.out.println("Server Message:"+inputLine);
}
catch (IOException e)
{
System.out.println("IOException "+e);
}
}
}
Output:
Starting Server
Server Message:Hello from client
Server Message:Conected, Yes!
IOException java.net.SocketException: Connection reset
客户端和服务器java文件位于同一个包中。
在下面的代码中,什么会触发IOException?
这与Eclipse有关吗?
仅供参考,我正在使用Eclipse SDK
版本:4.2.2
内部版本id:M2013024-1200问题是您的客户端打开一个
套接字,发送一些数据,然后退出程序,从而突然关闭连接
您应该从客户端调用Socket
上的close()
,通知服务器它将关闭套接字。正如@Jack在他的回答中提到的,您需要在客户端应用程序退出之前关闭()套接字
套接字是可自动关闭的
使用可关闭资源的安全工作方式是在try
块中创建:
public class Client {
public static void main(String[] args) {
System.out.println(" Starting Client ");
try(Socket socket = new Socket("localhost", 55555)) {
PrintWriter printWriter = new PrintWriter(socket.getOutputStream(), true);
printWriter.println("Hello from client");
printWriter.println("Conected, Yes!");
} catch (IOException e) {
e.printStackTrace();
}
}
}
退出时它将自动关闭(从“尝试”部分)。您能打印例外的详细信息并添加到这里吗?在服务器端,而不是打印“IOException”+e
do“IOException”+e.getMessage()
您使用的是什么版本的JDK?很高兴提供帮助。您可以接受我的回答以关闭此主题。我看不到关闭此主题的选项。