简体   繁体   English

Java客户端/服务器错误:连接重置

[英]Java Client/Server error: Connection reset

Hello i have a client server program and the server side works while the client side is having some problems. 您好,我有一个客户端服务器程序,并且在客户端遇到一些问题时服务器端可以正常工作。 The client prints out a message once it connects, but after some user input (which is not used yet) i get this error. 客户端一旦连接就打印出一条消息,但是在一些用户输入(尚未使用)之后,出现此错误。 The server prints out a text file with line numbers and sequence numbers(seq nums aren't quite right yet) and is supposed to send the line numbers, seq numbers and lines of text to the client. 服务器打印出带有行号和序列号的文本文件(序列号还不太正确),并应该将行号,序列号和文本行发送给客户端。

Server: 服务器:

public class STSServer {

/**
 * @param args the command line arguments
 */
public static void main(String argv[]) throws Exception 
{
    String startLineFromClient;
    String endLineFromClient;
    String stringLineNumber;
    String stringSeqNumber;
    String test = "hello";
    int convertStart;
    int convertEnd;
    int subtractStartEnd;
    int temp;
    int byteTransfer;
    int lineNumber = 0;
    int sequenceNumber;



    ServerSocket welcomeSocket =  new ServerSocket(6789);
    Socket connectionSocket =  welcomeSocket.accept();
    BufferedReader inFromClient =
            new BufferedReader(new InputStreamReader(connectionSocket.getInputStream()));
    DataOutputStream outToClient = 
            new DataOutputStream(connectionSocket.getOutputStream());

      try{
            File myFile = new File("alice.txt");
            FileReader fileReader = new FileReader(myFile);
            BufferedReader bufferedReader = new BufferedReader(fileReader);
            StringBuffer stringBuffer = new StringBuffer();
            String line;

            startLineFromClient = inFromClient.readLine();
            endLineFromClient = inFromClient.readLine();

             convertStart = Integer.parseInt(startLineFromClient);
             convertEnd = Integer.parseInt(endLineFromClient);

            while((line = bufferedReader.readLine()) != null)
            {   


                sequenceNumber = line.length();

                System.out.print(lineNumber);
                stringLineNumber = Integer.toString(lineNumber);
                outToClient.writeBytes(stringLineNumber);

                System.out.print(" ");

                System.out.print(sequenceNumber);
                stringSeqNumber = Integer.toString(sequenceNumber);
                outToClient.writeBytes(stringSeqNumber);


                System.out.print(" ");

                System.out.print(line);
                outToClient.writeBytes(line);
                System.out.println("");

                lineNumber++;

               //stringLineNumber = Integer.toString(lineNumber);
               //stringSeqNumber = Integer.toString(sequenceNumber);*/
               // outToClient.writeBytes(test);

            }
            fileReader.close(); 
        }
      catch(IOException e)
        {
            e.printStackTrace();
        }

}    

} }

Client: public class STSClient { 客户:公共类STSClient {

public static void main(String argv[])throws Exception
{
    String startLine;
    String endLine;
    String lineNumber;
    String seqNumber;
    String line;

    BufferedReader inFromUser = new BufferedReader(new InputStreamReader(System.in));
    Socket clientSocket = new Socket("localhost", 6789);
    DataOutputStream outToServer =
            new DataOutputStream(clientSocket.getOutputStream());
    BufferedReader inFromServer = 
            new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));

     while (true)
     {
        System.out.println("+++++++++++++++++++++++++++++++++++++++++++++");
        System.out.println("+++++++++++++++ Simple TCP Service (STS)+++++");
        System.out.println("+++++++++++++++++++++++++++++++++++++++++++++");
        System.out.println("Command allowed by the server for this client:");
        System.out.println("download [starting line #] [ending line #]");
        System.out.print("Command: ");
        startLine = inFromUser.readLine();
        endLine = inFromUser.readLine(); 

        outToServer.writeBytes(startLine + '\n');
        outToServer.writeBytes(endLine + '\n');


        lineNumber = inFromServer.readLine();
        seqNumber = inFromServer.readLine();
        line = inFromServer.readLine();

         System.out.print(lineNumber);
         System.out.print(seqNumber);
         System.out.print(line);
         System.out.println("");
     }  
}   

} }

Error: 错误:

Exception in thread "main" java.net.SocketException: Connection reset
at java.net.SocketInputStream.read(SocketInputStream.java:209)
at java.net.SocketInputStream.read(SocketInputStream.java:141)
at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:284)
at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:326)
at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:178)
at java.io.InputStreamReader.read(InputStreamReader.java:184)
at java.io.BufferedReader.fill(BufferedReader.java:161)
at java.io.BufferedReader.readLine(BufferedReader.java:324)
at java.io.BufferedReader.readLine(BufferedReader.java:389)
at stsclient.STSClient.main(STSClient.java:42)
  • Your client is reading lines. 您的客户正在阅读台词。

  • Your server is not sending lines. 您的服务器未发送线路。

  • Your server exits without closing the socket, which resets it on Windows. 服务器退出时没有关闭套接字,这在Windows上将其重置。

  • Your client is still stuck in the first readLine() waiting for a line terminator. 您的客户端仍然停留在第一个readLine()等待行终止符。

  • It gets a connection reset instead. 它会改为重置连接。

Solution: send lines, and don't exit without closing the socket. 解决方案:发送线路,并且在不关闭套接字的情况下不要退出。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM