Hi,
I'm new at socket programming. I'd be happy if anyone can help me out with this exception.

Two server sockets are running,
1) Control Server at port 10500, I have no problem in getting result from this server it returns "done#1#end#done#2#end#done#3#end#done#4#end#done#5#end".
2) Transfer Server at port 10502, the socket exception occurs at the time of reading result from Transfer server:

Code:
while ((streamIndex = _inFromTransferServer    
                                .read(transferServerBuffer)) != -1)
And the Client Socket is running at localhost/10501.

I've already checked if there is a client connection and the opening state of ControlServer/TransferServer.
But the inputstream (_inFromTransferServer) for reading the result from TransferServer is not ready. I wonder if that causes this exception?

That's the main():
Code:
transferThread = new TransferServer(variableFilter.getExpression(),simulationStopTime.getExpression());    
                            _transferThread.run();
That's the thread class:

Code:
public TransferServer(String parameterFilter, String stopTime)    
                throws IOException {    
                _controlClient = new Socket("localhost", 10501);    
                _toServer = new BufferedWriter(new OutputStreamWriter(    
                    _controlClient.getOutputStream()));    
            
            _toServer.write("setcontrolclienturl#1#127.0.0.1#10500#end");    
                _toServer.flush();    
            _controlServer = new ServerSocket(10500);    
            Socket _controlConnection = _controlServer.accept();    
            _inFromControlServer = new BufferedReader(new InputStreamReader(    
                    _controlConnection.getInputStream()));    
    
     _toServer.write("settransferclienturl#2#127.0.0.1#10502#end");    
        _toServer.flush();    
        _transferServer = new ServerSocket(10502);    
         Socket _transferConnection = _transferServer.accept();    
        _inFromTransferServer = new BufferedReader(new InputStreamReader(    
                _transferConnection.getInputStream()));    
            
            if (_controlClient.isConnected() && _toServer != null) {    
            try {    
                String parameterSequence = _parameterFilter;    
                String[] parameters = null;    
                String parameterDelimiter = "#";    
                parameters = parameterSequence.split(parameterDelimiter);    
    
                if (parameters.length >= 2) {    
                    _toServer    
                            .write("setfilter#3#" + parameterSequence + "#end");    
                    _toServer.flush();    
                } else if (parameters.length == 1) {    
                    _toServer.write("setfilter#3#" + parameters[0] + "#end");    
                    _toServer.flush();    
                } else    
                    System.err.println("Filter cannot be set!");    
    
                try {    
                    Thread.sleep(1000);    
                } catch (InterruptedException e) {    
                    e.printStackTrace();    
                }    
    
                _toServer.write("start#4#end");    
                _toServer.flush();    
    
                try {    
                    Thread.sleep(1000);    
                } catch (InterruptedException e) {    
                    e.printStackTrace();    
                }    
                _toServer.write("shutdown#5#end");    
                _toServer.flush();    
    
                try {    
                    Thread.sleep(1000);    
                } catch (InterruptedException e) {    
                    e.printStackTrace();    
                }    
            } catch (IOException e) {    
                e.printStackTrace();    
                throw new IOException("!" + e.getMessage());    
            }    
    
char[] controlServerBuffer = new char[124];    
            try {    
                _inFromControlServer.read(controlServerBuffer);    
                String statusMessage = new String(controlServerBuffer).trim();    
                if (statusMessage != null) {    
                    String loggerInfo = "Status Message from Transfer Server : "    
                            + statusMessage;    
                    _omcLogger.getInfo(loggerInfo);    
                }    
            } catch (IOException e) {    
                e.printStackTrace();    
                throw new IOException("!" + e.getMessage());    
            }    
}    
}    
public void run() {    
String lineDelimiter = "end";    
        String timeDelimiter = "#";    
        String wholeSimulationResult = null;    
        String lineSimulationResult = null;    
        String[] lineSplitResult = null;    
        String[] timeSplitResult = null;    
        char[] transferServerBuffer = new char[1024];    
        int streamIndex = 0;    
        try {    
    // FIXME THE SERVER'S INPUTSTREAM IS NOT READY, THIS CONDITION RETURN FALSE.    
   //  if(_inFromTransferServer.ready()){    
                if (_controlClient.isConnected()    
                        && !(_transferServer.isClosed() && _controlServer    
                                .isClosed())) {    
                    Outerloop: try {    
                        while ((streamIndex = _inFromTransferServer    
                                .read(transferServerBuffer)) != -1) {    
                            wholeSimulationResult = new String(    
                                    transferServerBuffer).trim();    
                            lineSplitResult = wholeSimulationResult    
                                    .split(lineDelimiter);    
                            for (int i = 0; i < lineSplitResult.length - 1; i++) {    
                                lineSimulationResult = lineSplitResult[i];    
                                timeSplitResult = lineSimulationResult    
                                        .split(timeDelimiter);    
                                         for (int j = 1; j < timeSplitResult.length; j++) {    
                                    if (j == 1) {    
                                        if ((timeSplitResult[j].toString()    
                                                .startsWith(_stopTime)))    
                                            break Outerloop;    
                                        else    
                                            System.out.print("At time : "    
                                                    + timeSplitResult[j] + " ");    
                                    } else {    
                                        System.out.print(timeSplitResult[j]    
                                                + " ");    
}    
                                }    
                            }    
                        }    
                        System.out.println("Stop time is reached!");    
                    } catch (IOException e) {    
                        e.printStackTrace();    
                    }    
                    try {    
                        _controlClient.close();    
                        _controlServer.close();    
                        _toServer.close();    
                        _inFromControlServer.close();    
                        String loggerInfo = "Socket Closed!";    
                        _omcLogger.getInfo(loggerInfo);    
                    } catch (IOException e) {    
                        e.printStackTrace();    
                    }    
                }    
            }    
        } catch (IOException e) {    
            e.printStackTrace();    
        }    
    }
That's the stacktrace of the exception:

java.net.SocketException: Connection reset
at java.net.SocketInputStream.read(SocketInputStream. java:196)
at java.net.SocketInputStream.read(SocketInputStream. java:122)
at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.j ava:283)
at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.ja va:325)
at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:1 77)
at java.io.InputStreamReader.read(InputStreamReader.j ava:184)
at java.io.BufferedReader.fill(BufferedReader.java:15 4)
at java.io.BufferedReader.read1(BufferedReader.java:2 05)
at java.io.BufferedReader.read(BufferedReader.java:27 9)
at java.io.Reader.read(Reader.java:140)
at ptolemy.domains.openmodelica.lib.omc.TransferServe r.run(TransferServer.java:216)
at ptolemy.domains.openmodelica.lib.OpenModelica.fire (OpenModelica.java:466)
at ptolemy.actor.sched.FixedPointDirector._fireActor( FixedPointDirector.java:808)
at ptolemy.actor.sched.FixedPointDirector.fire(FixedP ointDirector.java:241)
at ptolemy.domains.continuous.kernel.ContinuousDirect or.fire(ContinuousDirector.java:448)
at ptolemy.actor.CompositeActor.fire(CompositeActor.j ava:450)
at ptolemy.actor.CompositeActor.iterate(CompositeActo r.java:1089)
at ptolemy.actor.sched.StaticSchedulingDirector.fire( StaticSchedulingDirector.java:210)
at ptolemy.domains.sdf.kernel.SDFDirector.fire(SDFDir ector.java:492)
at ptolemy.actor.CompositeActor.fire(CompositeActor.j ava:450)
at ptolemy.actor.Manager.iterate(Manager.java:787)
at ptolemy.actor.Manager.execute(Manager.java:352)
at ptolemy.actor.Manager.run(Manager.java:1202)
at ptolemy.actor.Manager$PtolemyRunThread.run(Manager .java:1760)