Detection of socket connecting process, two thread problem

Discussion in 'Java' started by artik, Jan 25, 2013.

  1. artik

    artik Guest

    Hi,
    I use one socket and two threads with it: one for reading and one for writing to it. My problem is in moment when error occurs and two thread want to do connection again on the same socket by closing the secont at start. Result of this is that while one one thread (the firtst of catching error) wants to start reconnecting the second one close socket to perform it for reconnecting. Classic dead lock. Therefore I ask about possibility to read stateof socket exactly state of try to connecting?

    Regards,
    Artik
     
    artik, Jan 25, 2013
    #1
    1. Advertising

  2. artik

    artik Guest

    I'm newbie in Java and after several attempts and changing approaches i've decided to use synchronization like this below. I think it protects code (?) to use socket in the same time. Two threads using this procedures (disconnect and connect after) wait (if they need) when the second thread finished connecting and start to do the same: disconnect and connect. I can't findthe way: don't doing disconnection-connection by the second thread when the first one started this just second before.

    When error connections occurs in the threads (reading/writing) then call
    reconnection procedure insede it are:
    {...
    close_connection();
    set_connection();
    ....
    }
    which are below

    public synchronized void close_connection() {
    try {
    socket.shutdownInput();
    socket.shutdownOutput();
    socket.close();
    try {
    Thread.sleep(500);
    } catch (InterruptedException e1) {
    e1.printStackTrace();
    }
    } catch (IOException e1) {
    // TODO Auto-generated catch block
    e1.printStackTrace();
    }
    }

    public synchronized boolean setconnection() {
    boolean result=true;
    socket = new Socket();
    try {
    socket.connect(new InetSocketAddress(address, port), 500);
    in = new BufferedReader(new InputStreamReader(
    socket.getInputStream()));
    out = new BufferedWriter(new OutputStreamWriter(
    socket.getOutputStream()));
    } catch (IOException e)
    {result=false;
    }
    return result;
    }

    Artik
     
    artik, Jan 25, 2013
    #2
    1. Advertising

  3. On 1/25/2013 2:33 AM, artik wrote:
    > I'm newbie in Java and after several attempts and changing approaches i've decided to use synchronization like this below. I think it protects code (?) to use socket in the same time. Two threads using this procedures (disconnect and connect after) wait (if they need) when the second thread finished connecting and start to do the same: disconnect and connect. I can't find the way: don't doing disconnection-connection by the second thread when the first one started this just second before.
    >
    > When error connections occurs in the threads (reading/writing) then call
    > reconnection procedure insede it are:
    > {...
    > close_connection();
    > set_connection();
    > ...
    > }
    > which are below
    >
    > public synchronized void close_connection() {
    > try {
    > socket.shutdownInput();
    > socket.shutdownOutput();
    > socket.close();
    > try {
    > Thread.sleep(500);
    > } catch (InterruptedException e1) {
    > e1.printStackTrace();
    > }
    > } catch (IOException e1) {
    > // TODO Auto-generated catch block
    > e1.printStackTrace();
    > }
    > }
    >
    > public synchronized boolean setconnection() {
    > boolean result=true;
    > socket = new Socket();
    > try {
    > socket.connect(new InetSocketAddress(address, port), 500);
    > in = new BufferedReader(new InputStreamReader(
    > socket.getInputStream()));
    > out = new BufferedWriter(new OutputStreamWriter(
    > socket.getOutputStream()));
    > } catch (IOException e)
    > {result=false;
    > }
    > return result;
    > }
    >
    > Artik
    >


    I like to keep this sort of thing very simple. Divide up the connection
    handling part from the I/O part.

    Main thread
    Loop
    Handle connection
    Spawn service threads that handle I/O by passing socket
    Wait until all service threads are finished
    EndLoop
    End Main thread

    Service thread
    Loop
    Create readers and writers as appropriate
    Do I/O and process

    If error
    Close socket to stop all service threads
    Break out of loop
    End Loop
    End service thread

    --

    Knute Johnson
     
    Knute Johnson, Jan 25, 2013
    #3
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Laszlo Nagy
    Replies:
    1
    Views:
    4,852
    Mark Wooding
    Jan 27, 2009
  2. Jean-Paul Calderone
    Replies:
    0
    Views:
    970
    Jean-Paul Calderone
    Jan 27, 2009
  3. Laszlo Nagy
    Replies:
    0
    Views:
    550
    Laszlo Nagy
    Feb 1, 2009
  4. Steve Holden
    Replies:
    0
    Views:
    665
    Steve Holden
    Feb 1, 2009
  5. Steve Holden
    Replies:
    1
    Views:
    719
Loading...

Share This Page