2013-05-26 9 views
0

Java 소켓 프로그래밍을 처음 사용하여 명령이나 객체를 Java 소켓을 통해 서버로 전송하는 좋은 방법을 찾고 있습니다. 객체는 서버에 저장되고 명령은 서버에 데이터를 요청합니다.서버에 객체 및 명령 보내기

처음에 서버는 입력 스트림에서받은 내용을 알지 못하기 때문에 검토해야하지만 어떻게해야할지 모르겠다. 입력 스트림을 String으로 변환 한 다음 첫 번째 문자를 확인하여 명령을 만들지 여부를 결정합니다. 내가 가진 문제는 InputStream.toString()이 다음과 비슷한 것을 반환한다는 것입니다. [email protected]

의견 및 아이디어에 감사드립니다.

String input = inputStream.toString(); // this doesn't work 
String startString = 
    input.toString().substring(0, Math.min(input.toString().length(),3)); 

    if(startString.equals(COMMAND)){ 
    // process command, e.g. to request data from the server 
    } 
    else { 
    // extract object to send data to the server 
    } 
+0

무엇이 문제입니까? 개체를 보내는 중입니까? 또는 이것이 필수 객체인지 여부를 식별 할 때? – stinepike

+0

시도한 코드 스 니펫을 제공 할 수 있습니까? 우리에게 더 나은 이해를 줄 것입니다. –

답변

0

이 방법이 무엇인지 알아 냈습니다. 속임수는 다음과 같이 스캐너 객체에 inputStream을 래핑하는 것입니다.

Scanner s = new Scanner(inputStream); 
String str = s.nextLine(); 
0

한 가지 방법은 데이터 유형에 대한뿐만 아니라 명령에 대한 클래스를 생성 할 수있다 :

여기 내 첫 번째 잘못된 접근이다.

그러면 ObjectOutputStream (http://docs.oracle.com/javase/7/docs/api/java/io/ObjectOutputStream.html)의 writeObject 메소드를 사용하여 기본 Java 직렬화를 사용하여 서버에 명령/데이터를 보낼 수 있습니다 (필요한 클래스가 서버 클래스 경로에도 있다고 가정 함).

서버는 ObjectInputStream에서 서버를 가져 와서 유형에 따라 쉽게 작동 할 수 있습니다. Object 유형에서 캐스팅해야하지만 필요한 경우 .getClass() 또는 instanceof를 사용하여 실제 유형을 확인할 수 있습니다.

+0

고마워,하지만이 모든게 효과적이다. 난 그냥 요청 명령으로 간단한 문자열을 보내기로 결정했기 때문에 서버에서 데이터를 요청하는 내 접근 방식이 좋은지 또는 어쩌면 순진한 지 알고 싶었습니다. – user1812379

0

"간단한"텍스트 명령에는 아무런 문제가 없습니다. SMTP 또는 HTTP를 살펴보십시오. 일반 텍스트 일뿐입니다.

그 이유가 있습니다. telnet을 서버에 입력하고 명령을 입력 할 수 있습니다. 특별한 클라이언트없이 서버를 쿼리 할 수 ​​있기 때문에 큰 도움이됩니다. 예 로컬 웹 서버에 텔넷에 대한 (난 그냥 "/ GET"에 입력)

$ telnet localhost 80 
Trying 127.0.0.1... 
Connected to localhost.localdomain. 
Escape character is '^]'. 
GET/
<html> 


<body> 
    <h1>Welcome on xxx</h1> 
</body> 

</html> 

Connection closed by foreign host. 

이 서비스는 특별한 언어 나 각각 특별한 바이너리 형식으로 연결되지 않은 더.