Java 客户端套接字读取;冻结“;

Java 客户端套接字读取;冻结“;,java,sockets,proxy,groovy,stream,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

我想写一个简单的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

使用套接字输入流中的所有可用数据。如果客户端没有关闭连接,该方法将一直等待,直到它可以读取文件结尾字符(如果我没记错的话)。我必须采取什么措施来防止这种情况发生,并尽快提供客户端的字符串?

我想您需要查看上的文档。执行
length=input.available
以获取当前可用字节数,然后使用
input.read(缓冲区、偏移量、长度)
以准确读取可用字节数。您可能希望为每个在后台透明管理此缓冲区的新连接启动一个新线程,除非您首先创建一个单线程代理。

这很有效!谢谢请再问一个问题,java如何知道有多少字节可用?这更多的是一个底层操作系统的套接字库的问题,java为您抽象了它。您可以在这里看到如何在*nix操作系统中使用C执行此操作的示例: