客户端套接字读“冻结”

时间:2009-08-06 19:21:03

标签: java sockets proxy groovy stream

我想编写一个简单的Web代理,用于练习。这是我到目前为止的代码:


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

使用Socket的InputStream中的所有可用数据。如果客户端没有关闭连接,那么该方法将等到它可以读取文件结束字符(如果我没记错的话)。我有什么可以防止这种情况发生,并尽快提供客户端的字符串?

1 个答案:

答案 0 :(得分:2)

我认为您需要查看ObjectInputStream上的文档。执行length = input.available以获取当前可用字节数,然后使用input.read(buffer, offset, length)读取可用的字节数。您可能希望为每个在后台透明地管理此缓冲区的新连接启动一个新线程,除非您开始使用单线程代理。