У меня есть клиент-серверное приложение Java в Java, оба используют один и тот же класс соединения, который содержит оба сообщения отправки / получения.по некоторым причинам, некоторые из сообщений, которые я отправляю, принимаются в неправильном порядке:
вот код
//set up
_in = new BufferedReader(new InputStreamReader(this._socket.getInputStream()));
_out = new BufferedWriter(new OutputStreamWriter(this._socket.getOutputStream()));
this._socket.setSoTimeout(S_TIMEOUT);
public synchronized boolean send(String message){
try {
_out.write(message);
_out.write(Connection.DELIMITER);
_out.flush();
return true;
} catch (IOException e) {
}
return false;
}
public String receive(){
int c;
try {
String message = "";
System.out.println("Getting message:");
c = _in.read();
while(c != -1 && c != Connection.DELIMITER) {
message += (char) c;
c = _in.read();
}
if (c == -1) {
return null;
}
return message;
} catch (IOException e) { }
return null;
}
некоторые сообщения, например, «new_order» может возвращаться с «ew_ord»,некоторые символы теряются, другие отправляются отдельно.это кажется странным, поскольку его TCP
может ли это быть проблемой, связанной с кодировкой?
Разделитель равен (char) 0 времени ожидания сокета равно 20000 (то есть 20 секунд).каждые 10 секунд я отправляю пустое сообщение, чтобы убедиться, что сокет не закрывается
РЕДАКТИРОВАТЬ: хотя это было решено с помощью сканера, я должен сказать, что оригинальный код работал очень хорошо для многих сообщений / различных машин в течение очень долгого временивремя (несколько недель), а затем вдруг не удалось работать с одним конкретным сообщением на одном конкретном компьютере (другие сообщения проходили просто отлично).Я сделал передачу данных сокета в Java много раз, и я написал много методов чтения / записи для обработки сокетов.это первый раз, когда я столкнулся с этим.
, хотя в исходном коде я установил кодировку (в опубликованном коде я этого не сделал), я считаю, что проблема связана с кодировкой.в какой-то момент в полученном сообщении пропал каждый второй символ.потом я немного его изменил, и первый / второй символ сообщения были получены в отдельном сообщении.Насколько я понимаю, это проблема кодирования или какая-то брандмауэр / другая программа безопасности, которая работала на компьютере отправителя сообщения и который решил отфильтровать исходящие пакеты.