Что не так с этим простым примером сервера / клиента Java TCP?
Сначала запустите сервер:
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class Server {
public static void main(String[] args) throws Throwable {
ServerSocket ss = new ServerSocket(2345);
Socket s = ss.accept();
OutputStream os = s.getOutputStream();
Thread.sleep(5000);
for (int i = 0; i < 3; i++) {
os.write("A".getBytes());
os.flush();
System.out.println("Written in cycle " + i);
}
os.close();
s.close();
}
}
Запустите клиент и просмотрите сервер после этого:
import java.net.Socket;
public class Client {
public static void main(String[] args) throws Throwable{
Socket s=new Socket("localhost",2345);
s.close();
System.out.println("Closed");
}
}
Клиентский сокет немедленно закрывается.
Однако операция записи сокета на сервере завершается неудачно во втором цикле, т. Е. Первая запись не вызывает исключение.
Это вывод выполнения сервера:
Written in cycle 0
Exception in thread "main" java.net.SocketException: Software caused connection abort: socket write error
at java.net.SocketOutputStream.socketWrite0(Native Method)
at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:92)
at java.net.SocketOutputStream.write(SocketOutputStream.java:124)
at Server.main(Server.java:16)