mina-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "李健" <jian...@jit.com.cn>
Subject Re: How can i deal with the old [DataInputStream & DataOutputStream] client
Date Thu, 17 May 2007 09:17:29 GMT
    i'v tested to send request like "123" using DataOutputStream
    
    byte[] req = "123".getBytes()
    dataOutputStream.writeInt(req.length);
    dataOutputStream.write(req);
    dataOutputStream.flush();

    i tried to send this request 10 times, the server received data like this:

    recevieLen=7 [ 0 0 0 3 49 50 51 ]
    recevieLen=7 [ 0 0 0 3 49 50 51 ]
    recevieLen=7 [ 0 0 0 3 49 50 51 ]
    recevieLen=1 [ 0 ]
    recevieLen=1 [ 0 ]
    recevieLen=1 [ 0 ]
    recevieLen=1 [ 3 ]
    recevieLen=3 [ 49 50 51 ]
    recevieLen=1 [ 0 ]
    recevieLen=1 [ 0 ]
    recevieLen=1 [ 0 ]
    recevieLen=1 [ 3 ]
    recevieLen=3 [ 49 50 51 ]
    recevieLen=1 [ 0 ]
    recevieLen=1 [ 0 ]
    recevieLen=1 [ 0 ]
    recevieLen=1 [ 3 ]
    recevieLen=3 [ 49 50 51 ]
    recevieLen=1 [ 0 ]
    recevieLen=1 [ 0 ]
    recevieLen=1 [ 0 ]
    recevieLen=1 [ 3 ]
    recevie=3 [ 49 50 51 ]
    ......  

    
    i'v looked into JDK source code about DataOutputStream:    
    public final void writeInt(int v) throws IOException {
        out.write((v >>> 24) & 0xFF);
        out.write((v >>> 16) & 0xFF);
        out.write((v >>>  8) & 0xFF);
        out.write((v >>>  0) & 0xFF);
        incCount(4);
    }
    it will cal out.write() for every byte, so my server'll recevie length value 4 times.


    why the first 2 or 3 times request will be OK (the server can get the whole 7 bytes),
who can gvie me some help to handle this problem, thanks a lot.

======== 2007-05-15 17:08:29: ========

Hi, All
    
    i wanna to use MINA to improve my ApplicationServer, the old application's socket part
is developed using DataInputStream & DataOutputStream in both server and client side.
we wrote data package length at the begining for ervry request and response data. the code
looks like this

    // for request
    byte [] request = ...
    int reqLen = request.length;
    dataOutputStream.writeInt(reqLen);
    dataOutputStream.write(request);
    dataOutputStream.flush();
    ...
    // for response
    int resLen = dataInputStream.readInt();
    byte[] response = new byte[resLen];
    dataInputStream.read(response);
    ...
    

    i'v tried to use MINA to handle the request sent by my old clients(the clients have been
deployed in many area and CodeChanging is forbidden), because of the noblocking of NIO, when
one client calls writeInt(), write(), flush() methods orderly, my IoHandler would recevie
data partly in many times. so in  IoHandler.messageRecevied(), it couldn't get the whole request
data to do the business logic.
      
    who can give me some advice to handle tihs?

Best Regard!
                      LJ

                2007-05-15
              

= = = = = = = = = = = = = = = = = = = = = = 
Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message