0

我正在努力使我的服务器更稳定。它使用服务器套接字和套接字类。信息的传输是使用流类完成的。

我注意到有时调试会在一段时间内释放每一盎司。

我发现我的客户端只是做了一个套接字连接并且没有发送数据,或者少于服务器期望服务器会冻结类 InputStream 的读取方法。

有没有办法让读取方法超时?文件离子没有谈论时间噘嘴,但确实说它会阻止信息数据是和蔼可亲的。

如果读取无法超时,是否有另一种方法可以通过套接字连接读取数据并且如果客户端不再发送数据则不会冻结????

读取数据及其冻结位置的代码片段

public String ReadLine(){
    String out="";

    // read in one line
    try{
        request = new StringBuffer(1000);
        boolean f=true;
        while(true){
            int c=in.read(); // WILL FREEZ HEAR IF CLIENT NO LONGER CONNECTED OR SENDING DATA
            if (c=='\r'){
                // next should be a \n
                c=in.read(); 

    //.....
4

3 回答 3

0

请发布您的完整代码,但如果您使用 InputStream,它是一种阻塞 I/O 方法,只要您的客户端连接到它,它就会“冻结”。如果您断开客户端连接,它应该释放块。与其担心自己,不如创建一个单独的线程来处理 I/O。另外,这里真正的问题应该是,为什么客户端不发送消息?

于 2012-07-10T17:46:33.727 回答
0

你能不能试试...

int c = 0;
while((c = in.read()) != -1) {
...
}

看看它是否能解决问题。

于 2012-07-10T17:52:00.450 回答
0

如果您使用的是套接字,那么您需要在套接字上设置 SO_TIMEOUT 值。这将允许读取超时并抛出InterruptedIOException.

Socket.setSoTimeout是看的方法。请注意,超时是在套接字本身上设置的,而不是在从套接字获得的输入流上设置的。

于 2012-07-10T17:58:53.283 回答