开发者

Unable to send a big list over TCP Sockets - Blackberry

开发者 https://www.devze.com 2023-02-24 12:29 出处:网络
I\'m trying to send a list of 600 records over TCP/IP sockets using a java server and a Blackberry client. But every time it reaches the 63th record it stops, the odd thing about this is that if I onl

I'm trying to send a list of 600 records over TCP/IP sockets using a java server and a Blackberry client. But every time it reaches the 63th record it stops, the odd thing about this is that if I only send 200 records they are sent ok.

I haven't been able to understand why it happens, only that 63 records equals aprox to 4kB, basically it sends:

  • an integer with the total number of records to be sent And for every record
  • an integer with the length of the string
  • the string
  • a string terminator "$$$"

Since i need to send the whole 600 i have tried to close the InputStreamReader and reopen it, also reset it but without any result.

Does anybody else have experienced this behaviour? thanks in advanced.

EDIT

Here the code that receives:

private String readfromserver() throws IOException {
    int len=_in.read(); // receives the string length

    if (len==0)     // if len=0 then the string was empty
        return "";
    else {
            char[] input = new char[len+1];

            for (int i = 0; i < len; ++i) 
                input[i] = (char)_in.read();

            StringBuffer s = new StringBuffer();
            s.append(input);

            return s.toString();
    }       
} 

private void startRec(String data) throws IOException
{
    boolean mustcontinue=true;
    int len=_in.read();     // read how many records is about to receive

    if (len==0) {
        scr.writelog("There is no data to receive");
    }
    else {
        for(int i=0; i<len; i++)
            if (mustcontinue) {
                mustcontinue=mustcontinue && showdata(readfromserver()); 
                    }
                else {                  
                    scr.writelog("Inconsistency error #19");                    
                }           
    }        
}

the function showdata only shows the received string in a LabelField.

The code in the server:

try {
  _out.write(smultiple.size()); // send the number of records 
  _out.flush();

  for (int x=0; x<smultiple.size(); x开发者_开发知识库++)
  {
    int l=smultiple.elementAt(x).length();
    _out.write(l);  // send string length
      if (l>0)
        _out.write(smultiple.elementAt(x));         // send string

  }
    _out.flush();
} catch (Exception e) {
  principal.dblog(e.toString());
} 

smultiple is a vector containing the strings and everyone already have the terminator $$$.

Thanks.


I think 200 goes fine and 600 -not, because the latter number is bigger than 255 :-) Your code

int len=_in.read();

probably reads a byte and not an integer (4 bytes)

0

精彩评论

暂无评论...
验证码 换一张
取 消