No więc mam problem z przesyłaniem plików XML po TCP. Oto metoda, której używam, do generowania i wysłania XMLa:
private void sendXmlAnswer(int aid, String sname, String spassword, boolean asuccess) throws Exception
{
DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
// root elements
Document doc = docBuilder.newDocument();
Element rootElement = doc.createElement("login");
doc.appendChild(rootElement);
Element name = doc.createElement("name");
name.appendChild(doc.createTextNode(sname));
Element password = doc.createElement("password");
password.appendChild(doc.createTextNode(spassword));
Element id = doc.createElement("id");
id.appendChild(doc.createTextNode(Integer.toString(aid)));
Element success = doc.createElement("success");
success.appendChild(doc.createTextNode(asuccess ? "true" : "false"));
rootElement.appendChild(success);
rootElement.appendChild(id);
rootElement.appendChild(name);
rootElement.appendChild(password);
// write the content into xml file
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
DOMSource source = new DOMSource(doc);
PrintWriter out = parent.getOutputStream();
StreamResult result = new StreamResult(out);
transformer.transform(source, result);
out.flush();
}
a oto metoda, którą używam do odebrania wiadomości:
private void readAnswer() throws Exception
{
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
Document doc = dBuilder.parse(socket.getInputStream());
doc.getDocumentElement().normalize();
System.out.println("Root element :" + doc.getDocumentElement().getNodeName());
}
Problem polega na tym, że owo odczytanie nigdy się nie kończy… otrzymuję tylko SocketTimeoutException i tyle… zgaduję, że przy wysyłaniu powinienem jakoś dać znać, że to już jest koniec wiadomości tak, żeby klient już dalej nie próbował tego czytać… Niemniej jednak nie wiem jak to zrobić…