我试图在服务器和多个客户端之间建立连接,但即使对于一个客户端也不起作用。我想要做的就是使用ObjectOutputStream
类从客户端发送一个对象。连接在开始时成功完成,但是当我尝试将对象发送到服务器时,它失败了。
这是客户端部分,它是用类的主方法编写的:
Socket socket;
OutputStream out;
ObjectOutputStream fout;
boolean connected=false;
if (!connected) {
try {
socket = new Socket("localhost", 8000);
out = socket.getOutputStream();
fout = new ObjectOutputStream(out);
fout.flush();
connected = true;
fout.writeObject(ac1);//ac is an object of Plane class
} catch (Exception ex) {
System.out.println(ex.toString());
}
}
这是服务器:
public class server {
static class ServerThread implements Runnable {
Socket client = null;
public ServerThread(Socket c) {
this.client = c;
}
public void run() {
try {
System.out.println("Connected to client : "+client.getInetAddress().getHostName());
Plane ac=null;
InputStream in=client.getInputStream();
ObjectInputStream fin=new ObjectInputStream(in);
while(client.isConnected()){
ac = (Plane)fin.readObject();
System.out.println(ac.toString());
}
client.close();
} catch (Exception e) {
// System.err.println(e.getMessage());
e.printStackTrace();
}
}
}
public static void main(String args[]) {
try {
ServerSocket server = new ServerSocket(8000);
while (true) {
Socket p = server.accept();
new Thread(new ServerThread(p)).start();
}
} catch (Exception ex) {
System.err.println("Error : " + ex.getMessage());
}
}
}
有谁能告诉我这是什么问题?
答案 0 :(得分:0)
您的客户端永远不会关闭套接字,并且可能会退出,因此重置连接。所以关闭套接字。
NB isConnected()
不是有效的循环条件。它永远不会变得虚假。当EOFExceprion
被捕获时,你的循环应该终止。