2010-02-20 4 views
1

클라이언트가 서버에 명령을 보내는 일반적인 클라이언트 - 서버 소켓 프로그램을 작성하고 실행하여 클라이언트에 결과를 보냅니다.

그러나 명령을 실행하는 동안 오류이있는 경우 에 클라이언트을 알리고 싶습니다. 나는 "ERROR"또는 아마도 -1 등의 문자열을 보낼 수 있지만 명령 출력의 일부일 수도 있다는 것을 알고 있습니다. 소켓을 통해 오류 또는 예외를 보내는 더 좋은 방법이 있습니까?

내 서버가 Java이고 클라이언트가 파이썬 인 경우소켓에서 오류가 발생했습니다.

+0

아마도 서버 측에서 클라이언트 소켓이 예외를 발생시키는 방법이 있을까요? –

+0

내 의견을 바탕으로 작성된 질문 : http://stackoverflow.com/questions/23605248/from-the-server-side-cause-the-client-socket-to-throw-an-exception –

답변

0

일반적으로 클라이언트 - 서버 통신을 수행 할 때 어떤 종류의 프로토콜을 설정해야합니다. 아주 간단한 프로토콜은 명령을 보내기 전에 문자열 "COMMAND"를 보내고 오류를 보내기 전에 "ERROR"문자열을 보내는 것입니다. 이렇게하면 보내야 할 문자열 수가 두 배로 늘어나지 만 더 많은 유연성을 얻을 수 있습니다.

이미 개발 된보다 정교한 프로토콜이 많이 있습니다. String을 보내지 않고 Request 객체를 생성 할 수 있습니다. 그러면 Request 객체가 직렬화되어 클라이언트에 전송됩니다. 그런 다음 클라이언트는 요청 객체를 재구성하고 오류를 수행하든 명령을 실행하든 요청을 수행 할 수 있습니다.

0

문자열이 앞뒤로 보내지는 형식 또는 프로토콜을 이미 (필연적으로) 설정하고 있습니다. 각 문자열을 끝내거나 길이를 먼저 전송하는 등의 작업을 수행하고 있습니다. (TCP는 본질적으로 단지 스트림이므로 프로토콜을 사용하지 않으면 명령이나 출력이 끝나는 시점을 수신자가 알 수있는 방법이 없습니다!) -

문자열을 구분하는 데 사용하는 방법이 무엇이든간에 따라서 서버에서 클라이언트로 전송 된 결과는 각각 두 개의 문자열입니다. 하나는 오류 설명 (오류가 없을 경우 비어 있음)이고 다른 하나는 명령 결과 (결과가없는 경우 비어 있음)입니다. 이것은 보내고받는/해석하는 것이 쉽지 않을 것이고 최소한의 오버 헤드를 가질 것입니다 (빈 문자열을 보내는 것은 터미네이터 또는 길이 0을 보내는 것처럼 간단해야합니다).

관련 문제