2013-02-24 2 views
0

java 및 클라이언트 프로그램이 있습니다. 서버가 Wi-Fi를 통해 클라이언트에 데이터를 보내고 있습니다. 클라이언트에서 Wi-Fi 연결이 끊어지면 예외가 발생하고 수신 루프에서 빠져 나옵니다. 서버는 여전히 데이터를 계속 전송합니다. 서버가 사용하는 메소드는 oos.writeObject()입니다. 어떻게하면 서버에서 클라이언트에서 wifi의 중단을 감지하고 서버가 송신 루프에서 빠져 나갈 수 있습니까?연결 손실 감지

+0

TCP 또는 UDP 또는 다른 프로토콜? – Celada

+0

사용 된 프로토콜은 TCP입니다. – user1761399

답변

0

클라이언트가 (일부 유형의 wifi 연결 실패 모드에서) 연결이 끊어지면 즉시 알려주는 이유는 wifi 인터페이스가 클라이언트에 로컬이고 운영 체제가 곧바로 컴퓨터를 찢어지기 때문입니다 아래로 감지되었습니다. 서버의 관점에서 볼 때 멀쩡한 네트워크 링크입니다.

연결이 끊어지면 처음에는 서버가 계속 데이터를 버퍼링합니다. 버퍼 (서버의 운영 체제 버퍼와 TCP 창 크기)가 꽉 차면 더 많은 데이터를 보내려고하면 서버가 차단됩니다.

나중에 연결이 끊어지면 서버는 연결 시간이 초과되었다는 것을 알리고 예외가 발생합니다. 대신 연결이 다시 시작되면 버퍼가 비워지고 정상적인 데이터 흐름이 다시 시작됩니다.

멀리 할 수있는 네트워크 홉이 실패하면 즉시 서버의 연결 시간이 초과되도록 실제로는 변경하고 싶지는 않습니다. 그렇게했다면 연결이 매우 약해집니다. 작은 네트워크 재 컨버전스 이벤트 또는 짧은 일시적인 실패로 인해 연결이 끊어 질 수 있습니다.

+0

설명에 감사드립니다. 난 그냥 몇 가지 고정 된 기간 후 atleast 연결을 닫기 위해 여기에 사용할 수있는 읽기에 대한 setSoTimeout()와 비슷한 방법이 있는지 알아야합니다. – user1761399

+0

예 : 신호를 사용하거나 쓰고있는 쓰레드를 취소하거나 논 블로킹 I/O를 사용하고 소켓이 원하는 시간이 지난 후에 쓰려고하지 않으면 포기할 수 있습니다. – Celada

+0

Can 비 차단 I/O 또는 신호를 사용하여 글쓰기를 포기하는 링크로 안내합니다. 소켓에 쓰기가 가능하지 않다는 것을 어떻게 감지합니까? – user1761399