anyone?

On May 27, 5:31 pm, ayanir <[email protected]> wrote:
> Hello,
>
> I’m working on application that uses a socket connection.
> I’ve implemented 2 different Threads for the read() and the write()
> methods so they are not being blocked by the read.
> Everything is working well on the WiFi connection but when I switch to
> GSM connection the connection becomes unstable without any exception
> being thrown. It means that there are freezes – the write and read
> seems to work but no data is actually being piped.
> Here is what I’m doing:
>
> private Socket socketConn = null;
> private DataInputStream dis = null;
> private DataOutputStream dos = null;
>
> //Read buffer
> private byte[] buffer;
> ByteArrayOutputStream readBuffer;
>
> private String serverAddress;
> private int serverPort;
>
> public void openConnection(int timeout) throws Exception {
>         if(socketConn != null){
>                 return;
>         }
>
>         //if we need to resolve the host - if succeed we replace the default
> otherwise we use the default.
>         //the check is done only once.
>         if(checkHostResolved){
>                 checkHostResolved = false;
>                 try{
>                         InetAddress ia = 
> InetAddress.getByName(serverHostAddress);
>                         serverAddress = ia.getHostAddress();
>                 }
>                 catch(UnknownHostException e2){
>                         MyLog.printException(this, e2, 
> "run()InetAddress.getByName");
>                 }
>         }
>         socketConn = new Socket();
>         InetSocketAddress isa = new InetSocketAddress(serverAddress,
> serverPort);
>         socketConn.connect(isa, timeout);
>         socketConn.setKeepAlive(true);
>         socketConn.setTcpNoDelay(true);
>         socketConn.setSoLinger(true, 1000);
>
>         dis = new DataInputStream(socketConn.getInputStream());
>         dos = new DataOutputStream(socketConn.getOutputStream());
>
> }
>
> public void closeConnection() {
>         if(socketConn != null){
>                 try{
>                         if(dis != null){
>                                 socketConn.shutdownInput();
>                                 dis.close();
>                         }
>                         if(dos != null){
>                                 socketConn.shutdownOutput();
>                                 dos.close();
>                         }
>                         if(socketConn != null){
>                                 socketConn.close();
>                         }
>                         if(readBuffer != null){
>                                 readBuffer.reset();
>                         }
>                 }
>                 catch(IOException ioe){
>                         MyLog.printException(this, ioe, "Problem Closing 
> connection");
>                 }
>                 finally{
>                         dis = null;
>                         dos = null;
>                         socketConn = null;
>                 }
>         }
>         MyLog.printLog(this, "closeConnection end");
>
> }
>
> private int trySend(String message) {
>
>         try{
>                 byte[] data = message.getBytes();
>                 dos.write(data);
>                 dos.flush();
>                 return 0;
>         }
>         catch(SocketException se){
>                 MyLog.printException(this, se, "Problem with trySend");
>         }
>         catch(Exception e){
>                 MyLog.printException(this, e, "trySend()");
>         }
>
>         MyLog.printLog(this, "trySend() Problem with trySend!!!!");
>         return ERROR_CODE_CONNECTION;
>
> }
>
> private boolean tryRead() {
>         try{
>                 int b = 0;
>                 while((b = dis.read(buffer)) > 0){
>                         readBuffer.write(buffer, 0, b);
>
>                         //if the last read byte is '\0' then we have complete 
> reading at
> least 1 packet of data
>                         if(buffer[b - 1] == '\0'){
>                                 byte[] data = readBuffer.toByteArray();
>                                 MyLog.printLog(this, "read data.length=" + 
> data.length);
>                                 readBuffer.reset();
>                                 String text = new String(data, "utf-8");
>                                 return true;
>                         }
>                         MyLog.printLog(this, "out while read b=" + b);
>                         //if the b<0 then EOF has reached
>                         if(b < 0){
>                                 throw new Exception("EOF has reached");
>                         }
>                 }
>         }
>         catch(Exception e){
>         }
>         return false;
>
> }
>
> Does anyone encounter connection stability problems?
> Do I need to open the connection differently?
> How about using SocketChannel is it more reliable?
> Does Socket connection is a good approach when talking about mobile
> network connection?
>
> Thanks
> ayanir

-- 
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en

Reply via email to