Я пишу протокол поверх сокетов, поэтому я решил реализовать заголовки, а затем отправить информацию.Таким образом, на каждое соединение на сервере приходится один поток, который сидит там и читает заголовки, а затем делегирует их методам для чтения остальной информации, когда она поступает.
По сути, это выглядит так:
while ((length = inStream.read(buffer)) != -1)
{
dispatch(buffer, length);
}
Таким образом, метод отправки затем расшифровывает заголовки и делегирует метод в зависимости от того, что найдено в заголовке.Это выглядит примерно так:
byte[] clearText = decrypt(message,length);
if (cleartext == foo) sendFooToSocket();
Так что тогда sendFooToSocket () будет сидеть там и читать из instream или отправлять в outtream.Здесь я, кажется, сталкиваюсь с некоторыми проблемами: в клиенте я отправляю заголовок, затем сбрасываю, затем отправляю остальные данные, но кажется, что все идет как единое целое и не разделяется на заголовок, а затем данные.Также есть ли лучший способ принудительного использования метода sendFooToSocket?
public void sendFooToSocket()
{
byte[] buffer = new byte[1024];
int length = 0;
while ((length = inStream.read(buffer) >0)
{
message = decrypt(buffer, length);
}
}
Я бы предположил, что flush позволит мне выйти из этого метода, когда он закрывается, а затем открывает поток?
Итак, у меня есть 2 проблемы, похоже, что flush не разрушает мои сообщения, а flush, похоже, не позволяет выпадать из таких методов, как sendFooToSocket (), какие-либо предложения?
Для ясности, клиент просто делает это:
byte[] header = "MESG".getBytes();
cipher = encrypt(header);
outStream.write(cipher,0,cipher.length);
outStream.flush();
byte[] message = "Hi server".getBytes();
cipher = encrypt(message);
outStream.write(cipher,0,cipher.length);
outStream.flush();
Но это принимается сервером как 1 сообщение, даже если оно сбрасывалось после каждой записи.Отправка только заголовка работает, и мы застреваем в методе sendFooToSocket (), но если я отправляю данные после сброса, они приходят сразу.
Клиент использует OutputStream и InputStreams только из socket.get,Клиент также использует OutputStream и InputStream.Не уверены, имеет ли это значение?