소켓을 사용하여 만든 클라이언트/서버 응용 프로그램이 있습니다. 문제는 일부 정보를 요청하는 명령을 보내고 회신을 기다릴 때까지 차단한다는 것입니다. 따라서 양방향 요청/응답을 구현하기가 더 어려워집니다. 나 하나의 예를 사용하여 설명하자 클라이언트가 서버의 디렉토리에있는 파일을 나열 할 수 있습니다를, 그래서 코드에서 그렇게가 someting를 수행클라이언트/서버 대화 - 잘못 했습니까?
클라이언트 코드 : 1 전송 요청 명령 : LS/ 2 블록 LS 응답 기다리는 중. 3 파일 목록을 가져옵니다.
내가 한 이유는 클라이언트가 파일을 전송해야 할 수 있으므로 다음과 같습니다. 1- 파일 전송 요청 보내기. 2 서버가 수락하는지보기 위해 기다리는 read() 블록. 3이 경우에만 파일을 보내십시오.
그래서 서버에 기능을 요청할 수있을 때까지는 아무 문제가 없었습니다. 내 코드에서 클라이언트는 아무 것도 요청하지 않고 응답을 기다리는 것을 막을 수 있습니다. 그런 다음 서버는 클라이언트가 기다리고있는 응답에 아무런 의미가없는 요청 명령을 보낼 수 있습니다. 이것은 대화를 망칠 것입니다.
한 가지 해결책은 결코 응답을 차단하는 것이 아닙니다. 요청 명령을 보내고 응답이 도착하면 서버에서 어떤 요청이나 응답도 기다려야합니다. 응답이 도착하면 파일을 보냅니다. 그렇다면 각 요청/응답 쌍에 ID와 같이 추가해야 어떤 요청이 어떤 응답인지 알 수 있습니까?
추 신 : 호스트 간의 네트워크 대화를 디자인하는 방법에 대해 꽤 분실되어 있으며 네트워크 응용 프로그램의 패턴에 대한 책을 읽지 않았습니다.
PS2 : 내 나쁜 영어 SRY)
그냥 정보를 추가하려면 ... 내 모든 메서드는 그와 같은 (Java) 클래스 클라이언트가 있습니다 : public List listRemoteDir (String dir) 예외를 throw합니다 올바른 메시지를 얻으려면 –
fredcrs