Мне нужно сделать клиент на Java, который имеет ту же функцию, что и клиент, реализованный с помощью Flex.
Во Flex клиент отправляет следующие данные, используя XMLSocket.send:
<ConnectionInfo hubId="a0sjdas09dj-222"/>
Сервер .Net получает и отвечает.
Я пытаюсь сделать то же самое с Java, выполнив следующее:
String connectionInfo = "<ConnectionInfo hubId=\""+hubId+"\"/>";
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(this.socket.getOutputStream()));
writer.write(connectionInfo+"\n");
writer.flush();
Проблема в реализации Java, я никогда не получаю ответ от сервера.
Я отлаживал, просматривая порты tcp и сравнивая, что отправляет XMLSocket в flex и что отправляет мой сокет Java, и я не могу понять, почему .Net Server не отправляет ответ на Java-сокет.
Я уже пробовал использовать
DataOutputStrea, PrintWriter и другие ... из-за таких вещей, как добавление новых строк в конец и т. Д.
Гибкая документация имеет:
XML-сообщения отправляются через полнодуплексное сокетное соединение TCP / IP.
Каждое сообщение XML является полным документом XML, оканчивающимся нулем (0)
байт.
Неограниченное количество сообщений XML может быть отправлено и получено через
одиночное соединение XMLSocket.
Я не понимаю, в чем разница между данными, которые я отправляю, и клиентом Flex (который работает). Я предполагаю, что Сервер не принимает мой запрос и поэтому не отправляет ответ.
Но почему?
Решение: как сказал Шонхусейн, нужно сделать (ключ "\ 0"):
DataOutputStream dos = new DataOutputStream(this.socket.getOutputStream());
dos.write(new String(connectionInfo+"\0").getBytes("UTF8"));
dos.flush();