我想从我的服务器应用程序将同一个套接字上的两个不同对象发送到我的客户端应用程序。从我读过的内容中,我以正确的方式做到了这一点,但仍然无法将第二个对象发送给我的客户。为什么我得到Software导致连接中止:套接字写入错误?
这里是我的服务器代码:
public class ServerThread implements Runnable {
String name = null;
Socket socket = null;
public ServerThread(Socket s, String name) {
this.name = name;
this.socket = s;
}
@Override
public void run() {
try {
ObjectOutputStream serverOutputStream = new ObjectOutputStream(socket.getOutputStream());
ObjectInputStream serverInputStream = new ObjectInputStream(socket.getInputStream());
RequestType request = (RequestType) serverInputStream.readObject();
switch (request) {
case LOGIN:
serverInputStream = new ObjectInputStream(socket.getInputStream());
RequestManager.manageLogin(serverOutputStream, serverInputStream);
serverOutputStream = new ObjectOutputStream(socket.getOutputStream());
RequestManager.managePopulateTable(serverOutputStream);
}
serverOutputStream.close();
serverInputStream.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
这是我的服务器请求管理器
public class RequestManager {
public static void manageLogin(ObjectOutputStream serverOutputStream, ObjectInputStream serverInputStream) {
ArrayList<ProductEntity> availableProducts = new ArrayList<>();
try {
UserEntity loggedUser = (UserEntity) serverInputStream.readObject();
if (DatabaseManager.userConnect(loggedUser.getUsername(), loggedUser.getPassword())) {
serverOutputStream.writeObject(loggedUser);
}
else
serverOutputStream.writeObject(null);
} catch (Exception e) {
e.printStackTrace();
}
}
public static void managePopulateTable(ObjectOutputStream serverOutputStream) {
ArrayList<ProductEntity> availableProducts = DatabaseManager.getProducts();
try {
serverOutputStream.writeObject(availableProducts);
} catch (IOException e) {
e.printStackTrace();
}
}
}
出现的问题,当我尝试发送“ availableProducts“给客户。
停止创建和关闭新的对象流,并在两端使用与套接字的生命周期相同的流。 – EJP