В программе клиент-серверного сокета ниже клиент отправляет данные на сервер, который прослушивает порт 3500, но здесь сервер не отправляет данные обратно клиенту, поэтому в программе клиентского сокета я не читаюзатем входной поток получает исключение сокета, ошибка записи сокета.ниже приведен код сервера:
private static ServerSocket sc = null;
private static final int port = 3500;
public static void main(String args[]) throws IOException{
try {
sc = new ServerSocket(port);
while(true){
Socket socket = sc.accept();
System.out.println("Listening on port <=> "+port);
ObjectInputStream ois = new ObjectInputStream(socket.getInputStream());
String message = (String) ois.readObject();
System.out.println("Received Request <=>"+message);
ObjectOutputStream oos = new ObjectOutputStream(socket.getOutputStream());
oos.writeObject("Hi Client received your message<=>"+message);
ois.close();
oos.close();
socket.close();
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
Код сокета клиента, приведенный ниже:
try {
ObjectOutputStream oos = null;
ObjectInputStream ois = null;
Socket clientsocket = null;
for(int i=0;i<2;i++){
clientsocket = new Socket(InetAddress.getLocalHost().getHostName(), 3500);
oos = new ObjectOutputStream(clientsocket.getOutputStream());
oos.writeObject("Client Request: "+i);
//ois = new ObjectInputStream(clientsocket.getInputStream());
//String message = (String) ois.readObject();
//System.out.println("Message sent by Server: " + message);
//ois.close();
oos.close();
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
В приведенном выше коде, если комментарии удалены, то код работает нормально, но запутался, почемувходной поток должен читаться, когда нет данных для чтения.
Получение ниже исключения после комментирования секции входного потока, как сделано выше.
Listening on port <=> 3500
Received Request <=>Client Request: 0
java.net.SocketException: Software caused connection abort: socket write error
at java.net.SocketOutputStream.socketWrite0(Native Method)
at java.net.SocketOutputStream.socketWrite(Unknown Source)
at java.net.SocketOutputStream.write(Unknown Source)
at java.io.ObjectOutputStream$BlockDataOutputStream.drain(Unknown Source)
at java.io.ObjectOutputStream$BlockDataOutputStream.setBlockDataMode(Unknown Source)
at java.io.ObjectOutputStream.writeNonProxyDesc(Unknown Source)
at java.io.ObjectOutputStream.writeClassDesc(Unknown Source)
at java.io.ObjectOutputStream.writeOrdinaryObject(Unknown Source)
at java.io.ObjectOutputStream.writeObject0(Unknown Source)
at java.io.ObjectOutputStream.writeFatalException(Unknown Source)
at java.io.ObjectOutputStream.writeObject(Unknown Source)
at com.springexercise.demo.ServerTest.main(ServerTest.java:28)