Не приходят данные на Server socket если данные начинаются со слова "OPTIONS"
Написано тестовое серверное приложение, которое ждет клиентов на определенном порте. После соединения запускается ClientTask, которое обрабатывает конкретное соединение. (там getInputStream и после: read) Все работает хорошо до тех пор пока в начале посланных данных не встречается одно из зарезервированных команд HTTP, например OPTIONS. То есть, если клиент, допустим, посылает следующие данные: "OPTIONS asdfasdf", пакет не приходит и более того, соединение прерывается. У меня вопрос: какой сервис слушает мой частный открытый порт и решает что это HTTP запрос, а посколько HTTP запрос выполнен не по его стандарту, а по моему стандарту, то он останавливает соединение? Я хочу просто принять пакет, где есть случайно в начале слово OPTIONS или GET. Как я могу сделать, чтобы мой пакет, на мой порт приходили любые данные и чтобы они не определялись как HTTP команда? Если, просто для теста, послать с клиента правильный HTTP запрос, то команда проходит и нет никакого обрыва соединения.
Это приложение бежит на телефоне со статическим публичным IP, если это важно. Клиент - Windows приложение. WireShark показывает что с IP телефона приходит пакет RESET если встречается одно из зарезервированных команд HTTP.
final ExecutorService clientProcessingPool = Executors.newFixedThreadPool(50);
Runnable serverTask = new Runnable() {
@Override
public void run() {
try {
ServerSocket serverSocket = new ServerSocket(50000);
System.out.println("Waiting for clients to connect...");
while (true) {
Socket clientSocket = serverSocket.accept();
clientProcessingPool.submit(new ClientTask(clientSocket));
}
} catch (IOException e) {
System.err.println("Unable to process client request");
e.printStackTrace();
}
}
};
Thread serverThread = new Thread(serverTask);
serverThread.start();
Удалил все ненужное для читабельности
private class ClientTask implements Runnable {
private final Socket clientSocket;
private ClientTask(Socket clientSocket) {
this.clientSocket = clientSocket;
}
@Override
public void run() {
byte readBuffer[] = new byte[10001];
InputStream nis = null;
System.out.println("Got a client ! "+ this.clientSocket.getLocalSocketAddress()+" "+ this.clientSocket.getRemoteSocketAddress());
clientSocket.setReceiveBufferSize(10000);
nis = clientSocket.getInputStream();
while(true) {
int bytesReaded = nis.available();
if (bytesReaded > 0) {
bytesReaded = nis.read(readBuffer, 0, 10000);
Log.i(TAG, "data arrived " +bytesReaded+ " bytes");
}
}
}}