Я хочу написать простой веб-прокси для упражнений. Вот код, который я до сих пор:Клиентский сокет читает «freezes»
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 сокета. Если клиент не закрывает соединение, этот метод будет просто ждать, пока он не сможет прочитать конец символа файла (если я правильно помню). Что я должен предотвратить, чтобы это произошло, и чтобы строка клиента была доступна как можно скорее?
Это сработало! Благодаря! Еще один вопрос, пожалуйста, как java знает, сколько байтов доступно? – Geo
Это больше вопрос о библиотеке сокетов базовой операционной системы, которую Java абстрагирует для вас. Вы можете увидеть пример того, как это сделать, используя C в операционной системе * nix здесь: http://www.dholm.com/2008/05/13/available-socket-bytes/ –