所以我只是测试一些客户端 - 服务器的东西(我在一个更大的项目中正在研究它,但它一直在抛出错误,所以我决定确保我做得对。结果我不是) 它涉及ObjectOutput和Input流。当我在localhost上运行客户端和服务器时,它工作正常,但如果我在我的Linux服务器上运行服务器并在我的计算机上运行客户端,则当我到达提取对象的行时,连接已重置。这是代码:
客户端:
public static void main(String[] args){
String[] stuff = {"test", "testing", "tester"};
Socket s = null;
ObjectOutputStream oos = null;
try {
s = new Socket("my.server.website", 60232);
oos = new ObjectOutputStream(s.getOutputStream());
oos.writeObject(stuff);
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally{
try {
s.close();
oos.close();
} catch (IOException e) {}
}
}
服务器:
public static void main(String[] args){
ServerSocket ss = null;
Socket s = null;
ObjectInputStream ois = null;
try {
ss = new ServerSocket(60232);
s = ss.accept();
System.out.println("Socket Accepted");
ois = new ObjectInputStream(s.getInputStream());
Object object = ois.readObject();
System.out.println("Object received");
if (object instanceof String[]){
String[] components = (String[]) object;
for (String string : components){
System.out.println(string);
}
}
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}finally{
try {
ss.close();
s.close();
ois.close();
} catch (IOException e) {}
}
}
答案 0 :(得分:1)
在客户端中,您在关闭输出流之前关闭了底层套接字。 试试这个:
try {
oos.close();
s.close();
} catch (IOException e) {}
oos.close()应该使对象输出流将其所有数据刷新到套接字,然后关闭对象流。然后你可以关闭底层套接字。