Клиентский сокет читает "зависает" - PullRequest
0 голосов
/ 06 августа 2009

Я хочу написать простой веб-прокси для упражнений. Вот код, который у меня есть:


def g = new Proxy()
g.serverPort = 9000
println "starting"
g.eachClient { Socket client ->
    println "got a client"
    try {
        client.withStreams { input,output ->
            String text = input.text
            println "received $text from client"
            client.close()
        }
    } catch(IOException io) {
        println "IO error. Probably client disconnected"
        //io.printStackTrace()
    }
}

Дело в том, строка:

String text = input.text

потребляет все доступные данные в InputStream Сокета. Если клиент не закрывает соединение, этот метод просто подождет, пока он не сможет прочитать символ конца файла (если я правильно помню). Что мне нужно сделать, чтобы это не происходило и чтобы клиентская строка была доступна как можно скорее?

1 Ответ

2 голосов
/ 09 августа 2009

Я думаю, вы захотите проверить документацию по ObjectInputStream . Выполните length = input.available, чтобы получить количество доступных байтов в настоящее время, затем используйте input.read(buffer, offset, length), чтобы считать ровно столько байтов, сколько доступно. Возможно, вы захотите запускать новый поток для каждого нового соединения, которое прозрачно управляет этим буфером в фоновом режиме, если только вы не создаете однопоточный прокси для начала.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...