2013-02-11 3 views
-3

현재 Java에서 TCP/IP 클라이언트를 작성 중입니다. 클라이언트가 할 수있는 유일한 방법은 서버가 전송하는 코드를 실행하는 것입니다. this question을 본 적이 있지만 내 문제는 다른 응용 프로그램 인 경우처럼 코드가 실행된다는 것입니다. 그러나 클라이언트 코드에 문자열이 포함되어 있고 서버에서 메시지를 보내고 문자열을 읽고 내용을 다시 보낸 경우 클라이언트가 그렇게 할 수 없을 것입니다. 그 코드가 존재하지 않는 다른 프로그램에서 실행되기 때문입니다 :-(소스 코드로 작성된 것처럼 입력 코드를 실행하십시오.

그래서 내가 쓰여진 것처럼 입력으로부터 코드를 실행할 수있는 방법이 있습니다 ?

: 프로그램의 소스 코드

모든 도움이 많이

예 :-) 감사합니다

클라이언트에 "string0001"이라는 문자열이 있습니다. 클라이언트는 서버가 보내는 코드를 실행해야합니다. 서버는 클라이언트가 실행할 수있는 Java 코드 블록을 전송합니다. 코드에 다음과 같이 쓰여 있습니다 : string의 내용을 확인하고이 ip로 다시 보내주십시오. 클라이언트는 문자열을 읽고 "string0001"을 서버 ip에 다시 보낼 수 있어야합니다.

링크가 제공 한 솔루션을 사용하면 서버가 보낸 코드가 다른 프로그램 인 것처럼 실행되고 해당 프로그램에서 서버가 클라이언트에 읽을 것을 요청한 문자열이 존재하지 않습니다.

클라이언트는 문자열이있는 클라이언트 소스에 작성된 것처럼 이제 코드를 실행할 수 있습니다.

+1

이 단계를 하나씩 단계별로 구분하여 클라이언트와 서버 간의 데이터 흐름을 자세히 설명해 주실 수 있습니까? 이 순간에 따라 가기가 매우 어렵습니다. 나는 그것이 좋은 질문이지만 당신 downvotes의 위험을 실행 확신합니다. – Joe

+0

구체적인 예를 들어주세요. 클라이언트 코드에있는 문자열의 예는 무엇입니까? –

+3

이것은 보안상의 악몽처럼 들리지만 ... –

답변

0

:-) 도움이

희망 그럼 첫 번째 문제는 전송 된 소스 코드를 완료한다는 것이다. Java는 객체 지향 언어이므로 실행할 코드가 아직 보내지 않은 클래스에 대한 참조를 가질 수 있습니다.

두 번째 문제는 ... 코드를 모두 받았을 때와 코드가 어떤 패키지 및 파일에 있어야 하는지를 어떻게 알 수 있습니까?

코드가 메서드 나 클래스가없는 매우 단순한 루틴이면 메서드를 사용하여 클래스를 만들고 전달 된 코드를 메모리에 삽입 할 수 있습니다.

다음 코드는 here이라는 질문과 유사한 루틴을 사용하여 컴파일 할 수 있습니다.

+0

그러나 코드가 컴파일되면 orriginal 코드에서 문자열을 읽을 수 없습니다 : - (또는 뭔가 잘못 이해 했나요? 어쨌든 고맙겠습니다 :-) – Deni

+0

원래 문자열을 메모리에 저장 했으므로 어떤 이유로 든 읽어야했습니다. –

+0

더 나은 질문은 새 응용 프로그램에서 실행되는 코드가 서버 IP가 무엇인지 알 수 있습니까? 그리고 새로 작성한 응용 프로그램에 코드를 보낼 수 있고 코드가이 포트에서이 서버로 전송한다고 말하면 포트는 이미 다른 응용 프로그램에 바인드되어 있습니다. 도와 주시면 감사하겠습니다 :-) – Deni

관련 문제