java.net.SocketException:读取字节时重置连接
我正在尝试使用套接字在java中创建一个小型服务器。java.net.SocketException:读取字节时重置连接,java,sockets,socketexception,Java,Sockets,Socketexception,我正在尝试使用套接字在java中创建一个小型服务器。 套接字已连接,但当我将数据从客户端发送到服务器时,会出现异常 stacktrace(已更新): 完整客户端代码: SocketHints hints = new SocketHints(); hints.keepAlive = true; hints.connectTimeout = 2000; Socket socket; try {
套接字已连接,但当我将数据从客户端发送到服务器时,会出现异常 stacktrace(已更新): 完整客户端代码:
SocketHints hints = new SocketHints();
hints.keepAlive = true;
hints.connectTimeout = 2000;
Socket socket;
try
{
socket = Gdx.net.newClientSocket(Protocol.TCP, "127.0.0.1", 12346, hints);
ClientPackage client = new ClientPackage();
client.setRequestType(RequestType.ping);
ObjectOutputStream ous = new ObjectOutputStream(socket.getOutputStream());
ous.writeObject(client);
ous.flush();
ObjectInputStream ois = new ObjectInputStream(socket.getInputStream());
RespondPackage response = (RespondPackage) ois.readObject();
System.out.println("Respone type = " + response.getRequestType());
} catch (UnknownHostException e1)
{
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (IOException e1)
{
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (Exception e)
{
}
套接字已连接,但错误显示未连接。为了进一步调试,您可以尝试使用一些工具来监视网络数据包。您也可以尝试Wiresharkplease共享服务器代码,可能是您关闭了输出流或输入流,因此关闭流(in | | out)会导致关闭套接字。post更新为完整代码为什么所有ByteArrayInput/OutputStreams?为什么不直接将对象写入套接字?直接从中读出来?为什么是印刷作家?为什么test isConnected()在一个不可能为false的点上?@EJP i更新了我的代码,使其直接写入/读取对象。但我仍然得到连接重置。有什么建议吗?
class doComms implements Runnable
{
private Socket server;
PackageHandler packageHandler;
doComms(Socket server)
{
this.server = server;
packageHandler = new PackageHandler();
}
public void run()
{
try
{
ObjectInputStream ois = new ObjectInputStream(server.getInputStream());
ClientPackage clientPack = (ClientPackage) ois.readObject();
RespondPackage rp = packageHandler.handlePackage(clientPack);
ObjectOutputStream ous = new ObjectOutputStream(server.getOutputStream());
ous.writeObject(rp);
ous.flush();
server.close();
System.out.println("Connection was finished and closed.");
} catch (ClassNotFoundException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException ioe)
{
System.out.println("IOException on socket listen: " + ioe);
ioe.printStackTrace();
}
}
}
SocketHints hints = new SocketHints();
hints.keepAlive = true;
hints.connectTimeout = 2000;
Socket socket;
try
{
socket = Gdx.net.newClientSocket(Protocol.TCP, "127.0.0.1", 12346, hints);
ClientPackage client = new ClientPackage();
client.setRequestType(RequestType.ping);
ObjectOutputStream ous = new ObjectOutputStream(socket.getOutputStream());
ous.writeObject(client);
ous.flush();
ObjectInputStream ois = new ObjectInputStream(socket.getInputStream());
RespondPackage response = (RespondPackage) ois.readObject();
System.out.println("Respone type = " + response.getRequestType());
} catch (UnknownHostException e1)
{
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (IOException e1)
{
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (Exception e)
{
}