Sid
Sid

Reputation: 23

Exception in thread "main" java.net.SocketException: Connection reset at java.io.BufferedReader.readLine(Unknown Source)

I wrote a basic code in which sender is sending a message to the receiver and the receiver is printing it. I am a naive socket programmer. I looked into various post but still not able to resolve this issue. Here is my code:

TCPServer.java

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.Serializable;
import java.net.*;
import java.io.*;
import java.util.*;


import org.omg.CORBA.Any;


public class TCPServer {

    public static void main(String args[]) throws IOException{
        TCPServer tcpServer=new TCPServer();
        ServerSocket serverSocket=new ServerSocket(8777);
        Socket sock=serverSocket.accept();
        BufferedReader inputSenderBuffer=new BufferedReader(new InputStreamReader(sock.getInputStream()));
        DataOutputStream outputToSenderBuffer=new DataOutputStream(sock.getOutputStream());
        outputToSenderBuffer.flush();
        //outputToSenderBuffer.close();
        char[] inputArray=new char[2000];

        int i,lengthMessage;
        int a=1;
        System.out.println("We are here");
        while(a<1000)
        {
            System.out.println("Inside this while loop");
            String inputSender=inputSenderBuffer.readLine();
            lengthMessage=inputSender.length();
        for(i=0;i<lengthMessage;i++)
        {
            System.out.println("putting the received message into buffer");
            inputArray[i]=inputSender.charAt(i);
            System.out.println(inputArray[i]);
        }
        }
    }
}

TCPClient.java

import java.io.DataOutputStream;
import java.io.IOException;
import java.net.*;

public class TCPClient {

    public static void main(String args[])
    {

        try {
            Socket sock=new Socket("localhost",8777);
            DataOutputStream outputToReceiverBuffer=new DataOutputStream(sock.getOutputStream());
            System.out.println("Sending test message");
            int i=1000;
            while(i<1000)
            {
            outputToReceiverBuffer.writeBytes("1AAAAAAAAAA");
            outputToReceiverBuffer.flush();
            //outputToReceiverBuffer.close();
            }


        } catch (UnknownHostException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

}

Exception at the TCPServer.java console

Exception in thread "main" java.net.SocketException: Connection reset
    at java.net.SocketInputStream.read(Unknown Source)
    at java.net.SocketInputStream.read(Unknown Source)
    at sun.nio.cs.StreamDecoder.readBytes(Unknown Source)
    at sun.nio.cs.StreamDecoder.implRead(Unknown Source)
    at sun.nio.cs.StreamDecoder.read(Unknown Source)
    at java.io.InputStreamReader.read(Unknown Source)
    at java.io.BufferedReader.fill(Unknown Source)
    at java.io.BufferedReader.readLine(Unknown Source)
    at java.io.BufferedReader.readLine(Unknown Source)
    at TCPServer.main(TCPServer.java:31)

Kindly help me resolving this.

Upvotes: 0

Views: 2243

Answers (1)

user207421
user207421

Reputation: 310909

You're not writing anything:

int i=1000;
while(i<1000)

and you're never closing the socket. So when the sender exits, the connection is reset, et voila.

When you fix that, you're reading lines:

String inputSender=inputSenderBuffer.readLine();

but you're not writing lines:

outputToReceiverBuffer.writeBytes("1AAAAAAAAAA");
outputToReceiverBuffer.flush();

Instead of using DataOutputStream.writeBytes() you should use BufferedWriter.write()/newLine().

You're also not checking the result of readLine() for null, which indicates that the peer has closed the connection, so you should stop reading and close your socket. You should rely on that rather than an arbitrary counter to control your read loop.

Upvotes: 2

Related Questions