“线程中的异常”;“主要”;java.net.SocketException:java.io.BufferedReader.readLine上的连接重置(未知源)

“线程中的异常”;“主要”;java.net.SocketException:java.io.BufferedReader.readLine上的连接重置(未知源),java,sockets,connection-reset,Java,Sockets,Connection Reset,我写了一个基本代码,发送者向接收者发送消息,接收者打印消息。我是一个天真的套接字程序员。我查看了各种帖子,但仍然无法解决这个问题。 这是我的密码: TCPServer.java import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.Serializable; import java.net.*; import java.io.*; i

我写了一个基本代码,发送者向接收者发送消息,接收者打印消息。我是一个天真的套接字程序员。我查看了各种帖子,但仍然无法解决这个问题。 这是我的密码:

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)
TCPServer.java
导入java.io.BufferedReader;
导入java.io.IOException;
导入java.io.InputStreamReader;
导入java.io.Serializable;
导入java.net。*;
导入java.io.*;
导入java.util.*;
导入org.omg.CORBA.Any;
公共类TCPServer{
公共静态void main(字符串args[])引发IOException{
TCPServer TCPServer=新的TCPServer();
ServerSocket ServerSocket=新的ServerSocket(8777);
Socket sock=serverSocket.accept();
BufferedReader inputSenderBuffer=新的BufferedReader(新的InputStreamReader(sock.getInputStream());
DataOutputStream OutputOnderBuffer=新的DataOutputStream(sock.getOutputStream());
OutputOSenderBuffer.flush();
//outputToSenderBuffer.close();
char[]inputArray=新字符[2000];
inti,lengthMessage;
INTA=1;
System.out.println(“我们在这里”);

而(a你没有写任何东西:

int i=1000;
while(i<1000)
但你不是在写台词:

String inputSender=inputSenderBuffer.readLine();
outputToReceiverBuffer.writeBytes("1AAAAAAAAAA");
outputToReceiverBuffer.flush();
您应该使用
BufferedWriter.write()/newLine()。


您也没有检查
readLine()
的结果是否为空,这表示对等方已关闭连接,因此您应该停止读取并关闭套接字。您应该依靠该结果而不是任意计数器来控制读取循环。

您没有写入任何内容:

int i=1000;
while(i<1000)
但你不是在写台词:

String inputSender=inputSenderBuffer.readLine();
outputToReceiverBuffer.writeBytes("1AAAAAAAAAA");
outputToReceiverBuffer.flush();
您应该使用
BufferedWriter.write()/newLine()。


您也没有检查
readLine()的结果
为null,表示对等方已关闭连接,因此您应该停止读取并关闭套接字。您应该依靠该计数器而不是任意计数器来控制读取循环。

您可能需要指定客户端或服务器是否正在生成错误。服务器正在生成异常。您可能需要指定客户端或服务器正在生成错误。服务器正在生成异常。