0

私のサーバーコードでは、クライアントに別のリクエストを送信して応答を返しますが、最初の読み取りリクエストのみがアクセスされ、2番目の読み取りステートメントにアクセスしている間、データバイトを読み取ることができません.私のコードは次のとおりです.

private static boolean Rt_Request(int id,Object client)throws Exception  
{ 

int size=5; 

byte[] buf=new byte[size];

char[] cbuf=new char[32]; 

int byteRead; Socket s=(Socket)client;


BufferedReader in1= new BufferedReader(new InputStreamReader(s.getInputStream()));

PrintStream out=new PrintStream(s.getOutputStream());

try {
    buf[0]=0x02;            
    buf[1]=0x09;            
    buf[2]=0x01;            
    buf[3]=0x00;            
    buf[4]=0x03;
    Thread.sleep(5000);

    out.write(buf, 0, 5);      
} catch(Exception e) {        
     System.out.println("Error Occured...."+e);                             
}

byteRead=0;

while(byteRead!=1) {
        try {

            byteRead=in1.read(cbuf, 0, 1);// Have problem on this line,here I am unable to read data bytes.
            for(int i=0;i<byteRead;i++)
            {
            System.out.println(cbuf[i]);
            }
            if(byteRead==0)
            {
                System.out.println("Breaking.....");
                return false;
            }         
        }
        catch(Exception e) {
            System.out.println("Error Occured...."+e);
            return false;
        }

    }       
        return true;   
    } catch(Exception e) {
        System.out.println("System is not Connected..."+e);
        return false;
    }

read.available();,read.fully(); ソケットが閉じていないことをほぼすべて試しました。等々、解が得られません。この関数をTimerTaskクラスのrunメソッドに書きました。どんな助けでも大歓迎です

4

4 に答える 4

0

read()少なくとも 1 バイトが使用可能になるまでブロックします。送信していないか、適切にフラッシュしていないかBufferedReaders、同じソケットで複数を作成している可能性があります。

成功した後、 NBbytesReadがゼロになることはありません。read(cbuf, 0, 1).

于 2013-04-15T23:12:03.213 に答える
0

使用可能なデータがない場合、基になるメソッドInputStreamの読み取りはブロックされます (つまり、ハング/待機)。

このメソッドは、入力データが使用可能になるか、ファイルの終わりが検出されるか、例外がスローされるまでブロックされます。

私はこれが事実であると強く疑っています。in1.ready()これは、リーダーを呼び出して確認できます。

出力バッファをフラッシュする

out.flush();

バイトを書き込んだ後、またはローカルにバッファリングされる可能性があります。

于 2013-04-15T07:52:26.550 に答える