소켓을 통해 서버에 연결하고 XML 메시지를 보내거나받는 Java 클라이언트에서 작업하고 있습니다. 나는 메시지의 스키마가 무엇인지를 안다. 현재 작동하고 있지만 지저분한 느낌이 들며 서버에서 여러 XML을 한꺼번에 처리하는 방법을 아직 테스트하지 않았습니다.소켓에서 XML을 읽는 방법을 개선하는 방법
private static BufferedReader socketIn;
private static PrintWriter socketOut;
private static final String SERVICES_FILE = "/etc/services";
public static void main(String[] args) {
int port = getServicePortByName("Service1", "tcp");
try {
logger.info("Creating socket port with ip: " + InetAddress.getLocalHost() + " and port: " + port);
Socket socket = new Socket(InetAddress.getLocalHost(), port);
socketOut = new PrintWriter(socket.getOutputStream(), true);
String message = createMessageXML("LOGIN");
socketOut.println(message);
socketIn = new BufferedReader(new InputStreamReader(socket.getInputStream()));
StringBuilder inputLine = new StringBuilder();
String tmp;
while (true) {
//loop to keep listening/parsing
while(socketIn.ready()) {
tmp = socketIn.readLine();
inputLine.append(tmp);
}
if(inputLine.length() > 0) {
parseReceivedMessage(inputLine.toString());
}
inputLine.replace(0, inputLine.length(), "");
}
} catch (UnknownHostException ex) {
Logger.getLogger(TestClient.class.getName()).log(Level.SEVERE, null, ex);
} catch (IOException ex) {
Logger.getLogger(TestClient.class.getName()).log(Level.SEVERE, null, ex);
}
}
parseReceivedMessage 방법은 단지 문자열 취하고 문서 객체로 변환 : 여기서
코드이다. 내 질문은 거기에 더 나은 또는 클리너 StringBuilder를 사용하는 대신 할 수있는 방법은 무엇입니까? 원래는 InputStream을 DOM 빌더 구문 분석 메소드에 전달하려고했다. ByteArray 스트림을 사용하는 몇 가지 예제를 보았지만 그 중 일부 문제가있었습니다. 설명이 필요한 것이 있으면 알려주세요.
구현하려는 프로토콜의 실제 형식은 무엇입니까? 이것은 분명히 제작 프로토콜이 아니기 때문에 메시지 형식에 대한 문서가 있습니까? –