Сервер Java - TCP Socket обнаруживает EOF, не закрывая соединение сокета - PullRequest
0 голосов
/ 20 января 2012

Есть ли способ обнаружить EOF при чтении из сокета TCP, пока соединение сокета остается открытым?

Большинство примеров, которые я видел, - это что-то вроде:

int n=0;
While((n = read.inStream(data)) != -1){
    destType.write(data, 0, n);
}

Однако это означает, что вы вынуждены создавать новое соединение каждый раз, когда хотите получить новый фрагмент данных. В моем случае это постоянный поток изображений, которые отправляются через сокет в байтах, и я хотел бы обрабатывать каждое изображение без необходимости закрывать соединение между ними, чтобы у меня были все изображения, связанные с одним пользователем, а также просто эффективнее не постоянно открывать и закрывать соединения на высокой частоте.

Так есть ли способ сделать это или некоторую информацию о возможной альтернативе?

1 Ответ

1 голос
/ 20 января 2012

Нет - если соединение остается открытым, поток не достиг своего конца. Идея о том, что поток сообщает EOF , а затем получает больше данных , противоречит принципу потока.

Если вы хотите отправлять несколько сообщений через поток TCP, самый простой способ - префикс каждого сообщения его длиной:

HEADER BODY
HEADER BODY
HEADER BODY

Затем клиент прочитает заголовок, узнает, как долго сообщение, прочитает его, затем прочитает следующий заголовок и т. Д.

...