닫힌 연결에 쓰려고 할 때 소켓에서 예외가 발생하지 않습니다.

올렉산드르 파 첸코

나는 자바 소켓 프로그래밍에 익숙하지 않지만 문제에 직면했습니다.
클라이언트 측에서 예기치 않게 닫힌 연결에 쓰려고 할 때 예외가 발생하지 않습니다. 나는 서버 측이 있습니다.

    public static void main(String[] args) throws IOException { 
    ServerSocket socket = new ServerSocket(8036);
    String st;
    while(true) {
        System.out.println("hello");
        Socket socket1 = socket.accept();
        BufferedReader reader = new BufferedReader(new InputStreamReader (socket1.getInputStream()));
        BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(socket1.getOutputStream()));
        System.out.println(reader.readLine());
        writer.write("h");
        writer.flush();
    }
}

그리고 클라이언트

    public static void main(String[] args) throws  Exception{

    Inet4Address s = (Inet4Address)Inet4Address.getByName("localhost");
    System.out.println("begin");
     Socket socket = new Socket(s,8036);
     BufferedWriter w = new BufferedWriter (new OutputStreamWriter(socket.getOutputStream()));
     BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
     String h ;
     int prev = 0;
}

연결 직후 클라이언트가 종료되는 것을 볼 수 있듯이 소켓을 닫지 않고 예기치 않게 종료 된 클라이언트를 모델링하려고합니다. 그러나 소켓에 쓰기를 시도하는 동안 서버 측에서 예외가 발생하지 않습니다. 왜?

user207421
  1. TCP는 피어가 읽기를 위해 연결을 닫았 음을 FIN을 수신 할 때 알 수 없습니다. 피어가 쓰기를 위해 연결을 닫았다는 것만 알고 있습니다. 출력을 위해 연결을 종료하고 여전히 읽고있을 수 있습니다. 따라서 이러한 연결에 대한 첫 번째 쓰기는 오류가 될 수 없습니다.

  2. TCP 연결에 쓸 때 데이터는 소켓 전송 버퍼에서 로컬로 버퍼링되고 제어가 응용 프로그램에 반환됩니다. 네트워크 쓰기는 비동기 적으로 진행됩니다. 따라서 피어에 의해 이미 닫힌 연결에 대한 첫 번째 쓰기는이를 감지 할 가능성이 낮습니다. 후속 쓰기가 수행됩니다.

NB 귀하의 질문은 닫힌 소켓에 쓰는 것이 아니라 피어에 의해 닫힌 연결에 쓰는 것에 관한 것입니다. 그러면 즉시 EBADF를 얻을 수 있습니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

C #의 단순 소켓 서버가 클라이언트에 데이터를 쓰려고 할 때 예기치 않게 연결을 닫습니다.

분류에서Dev

닫힌 소켓의 C # TcpClient WriteAsync에서 예외가 발생하지 않습니다.

분류에서Dev

소켓 io / express 서버에 연결하려고 할 때 404 오류가 발생합니다.

분류에서Dev

사용자 예외를 추가하려고 할 때 : 서버가 요청을 처리하지 않습니다. 및 setPassword 예외 : 호출 대상에 의해 발생

분류에서Dev

오프라인 SQL Server에 연결할 때 예외가 발생하지 않음

분류에서Dev

새 연결을 만들려고 할 때 apache.commons.dbcp2 연결 풀에서 소켓 오류가 발생하는 이유는 무엇입니까?

분류에서Dev

웹 소켓 서버에 연결하려고 할 때 X509TrustManager 구현 사용 불가능 오류가 계속 발생합니다

분류에서Dev

linq에서 날짜를 비교하려고 할 때 .net 에서이 예외가 발생했습니다.

분류에서Dev

대기열을 삭제하려고 할 때 Activemq에서 InstanceNotFoundException과 같은 예외가 발생했습니다.

분류에서Dev

닫힌 파일 설명자에 쓰면 오류가 발생하지 않습니다.

분류에서Dev

빈 LinkedList에서 요소를 제거하려고 할 때 어떤 예외가 발생합니까?

분류에서Dev

DB에 연결하려고 할 때 Python에서 많은 실행 오류가 발생했습니다.

분류에서Dev

외부 라이브러리에서 메소드를 사용하려고 할 때 읽기 / 쓰기 액세스 오류가 발생했습니다.

분류에서Dev

여러 이미지를 결합하려고 할 때 C # Graphics.DrawImage ()에서 메모리 부족 예외가 발생합니다.

분류에서Dev

Dropbox에서 파일을 다운로드하려고 할 때 null 포인터 예외가 발생합니다.

분류에서Dev

텍스트 파일에서 줄을 삭제하려고 할 때 예외가 발생합니다. 어떻게 해결할 수 있습니까?

분류에서Dev

텍스트 파일에서 줄을 삭제하려고 할 때 예외가 발생합니다. 어떻게 해결할 수 있습니까?

분류에서Dev

Powershell에서 SMO.Backup.AddDevice를 사용하려고 할 때 변환 예외가 발생합니다.

분류에서Dev

서버에 연결하려고 할 때 'remote-server-timeout'예외

분류에서Dev

2D 배열에 쓰려고 할 때 처리되지 않은 예외

분류에서Dev

winsock에서 C ++로 소켓을 만들고 Google에 연결하고 응답이 끝날 때 쓰레기가 발생합니다.

분류에서Dev

Azure Postgres에 연결할 때 서버가 예기치 않게 연결을 닫습니다.

분류에서Dev

wxListBox (C ++, wxWidgets, CodeBlocks)에 쓰려고 할 때 SIGSEGV, Segmentation 오류가 발생합니다.

분류에서Dev

Python에서 파일에 서식있는 텍스트를 쓰려고 할 때 문제가 발생했습니다.

분류에서Dev

UI가 아닌 스레드에서 실행할 때 WinRT가 예외를보고하지 않습니다.

분류에서Dev

내 간단한 클라이언트가 내 파이썬 소켓 서버에 연결하려고 할 때마다 충돌합니다.

분류에서Dev

전역 변수에서 값을 가져 오려고 할 때 Null 포인터 예외가 발생합니다.

분류에서Dev

PowerBI를 mySQL에 연결하려고 할 때 예기치 않은 연결

분류에서Dev

실제 Android 기기에서 Flutter에 네트워크 이미지를 추가 할 때 소켓 예외 발생

Related 관련 기사

  1. 1

    C #의 단순 소켓 서버가 클라이언트에 데이터를 쓰려고 할 때 예기치 않게 연결을 닫습니다.

  2. 2

    닫힌 소켓의 C # TcpClient WriteAsync에서 예외가 발생하지 않습니다.

  3. 3

    소켓 io / express 서버에 연결하려고 할 때 404 오류가 발생합니다.

  4. 4

    사용자 예외를 추가하려고 할 때 : 서버가 요청을 처리하지 않습니다. 및 setPassword 예외 : 호출 대상에 의해 발생

  5. 5

    오프라인 SQL Server에 연결할 때 예외가 발생하지 않음

  6. 6

    새 연결을 만들려고 할 때 apache.commons.dbcp2 연결 풀에서 소켓 오류가 발생하는 이유는 무엇입니까?

  7. 7

    웹 소켓 서버에 연결하려고 할 때 X509TrustManager 구현 사용 불가능 오류가 계속 발생합니다

  8. 8

    linq에서 날짜를 비교하려고 할 때 .net 에서이 예외가 발생했습니다.

  9. 9

    대기열을 삭제하려고 할 때 Activemq에서 InstanceNotFoundException과 같은 예외가 발생했습니다.

  10. 10

    닫힌 파일 설명자에 쓰면 오류가 발생하지 않습니다.

  11. 11

    빈 LinkedList에서 요소를 제거하려고 할 때 어떤 예외가 발생합니까?

  12. 12

    DB에 연결하려고 할 때 Python에서 많은 실행 오류가 발생했습니다.

  13. 13

    외부 라이브러리에서 메소드를 사용하려고 할 때 읽기 / 쓰기 액세스 오류가 발생했습니다.

  14. 14

    여러 이미지를 결합하려고 할 때 C # Graphics.DrawImage ()에서 메모리 부족 예외가 발생합니다.

  15. 15

    Dropbox에서 파일을 다운로드하려고 할 때 null 포인터 예외가 발생합니다.

  16. 16

    텍스트 파일에서 줄을 삭제하려고 할 때 예외가 발생합니다. 어떻게 해결할 수 있습니까?

  17. 17

    텍스트 파일에서 줄을 삭제하려고 할 때 예외가 발생합니다. 어떻게 해결할 수 있습니까?

  18. 18

    Powershell에서 SMO.Backup.AddDevice를 사용하려고 할 때 변환 예외가 발생합니다.

  19. 19

    서버에 연결하려고 할 때 'remote-server-timeout'예외

  20. 20

    2D 배열에 쓰려고 할 때 처리되지 않은 예외

  21. 21

    winsock에서 C ++로 소켓을 만들고 Google에 연결하고 응답이 끝날 때 쓰레기가 발생합니다.

  22. 22

    Azure Postgres에 연결할 때 서버가 예기치 않게 연결을 닫습니다.

  23. 23

    wxListBox (C ++, wxWidgets, CodeBlocks)에 쓰려고 할 때 SIGSEGV, Segmentation 오류가 발생합니다.

  24. 24

    Python에서 파일에 서식있는 텍스트를 쓰려고 할 때 문제가 발생했습니다.

  25. 25

    UI가 아닌 스레드에서 실행할 때 WinRT가 예외를보고하지 않습니다.

  26. 26

    내 간단한 클라이언트가 내 파이썬 소켓 서버에 연결하려고 할 때마다 충돌합니다.

  27. 27

    전역 변수에서 값을 가져 오려고 할 때 Null 포인터 예외가 발생합니다.

  28. 28

    PowerBI를 mySQL에 연결하려고 할 때 예기치 않은 연결

  29. 29

    실제 Android 기기에서 Flutter에 네트워크 이미지를 추가 할 때 소켓 예외 발생

뜨겁다태그

보관