Java NoTouchElementException:未找到行?

Java NoTouchElementException:未找到行?,java,printwriter,nosuchelementexception,Java,Printwriter,Nosuchelementexception,我正在努力用java制作回文服务器,但是我一直收到一个找不到行的错误,这似乎是来自我的PrintWriter,但我不知道为什么。有人能解释一下是什么导致了找不到线路的错误吗 我的代码 import java.io.IOException; import java.io.OutputStream; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; import java.util.Sc

我正在努力用java制作回文服务器,但是我一直收到一个找不到行的错误,这似乎是来自我的PrintWriter,但我不知道为什么。有人能解释一下是什么导致了找不到线路的错误吗

我的代码

import java.io.IOException;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;


public class PalindromeServer {

public static void main(String[] args){
    try{
    int port = 5150;
    ServerSocket ssocket = new ServerSocket(port);


    Socket client = ssocket.accept();

    OutputStream outStream = client.getOutputStream();
    Scanner scan = new Scanner(client.getInputStream());
    PrintWriter writer = new PrintWriter(outStream, true);

    while(scan.hasNextLine()){
        String in = scan.nextLine();
        String out = "";
        if(in.equals("SHUT DOWN")){
            ssocket.close();
        }
        in.replaceAll("\\s+","");
        int length = in.length();

          for ( int i = length - 1 ; i >= 0 ; i-- ){  
             out = out + in.charAt(i);
          }
          in.toLowerCase();
          out.toLowerCase();

          if(in.equals(out)){
              writer.print("YES");
              client.close();
          }
          else{
              writer.print("NO");
              client.close();
          }
    }

}catch (IOException e) {}

}
}
Junit测试

import org.junit.runners.MethodSorters;

import static org.junit.Assert.*;

import java.io.IOException;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.Scanner;

import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.FixMethodOrder;
import org.junit.Test;

@FixMethodOrder(MethodSorters.NAME_ASCENDING)
public class PalindromeServerTest {
@BeforeClass
public static void startServer() {
    // run server
    Thread thread = new Thread(new Runnable() {
        @Override
        public void run() {
            PalindromeServer.main( null );
        }
    });
    thread.start();
}
@Before
public void waitTwoSecondsBetweenTests() {
    try {
        Thread.sleep( 2000 );
    } 
    catch (InterruptedException e) {
        e.printStackTrace();
    }
}

@Test(timeout=3000)
public void testServerWithNonPalindrome() {
    try {
        // run client
        Socket      socket  = new Socket( "localhost", 5150 );
        Scanner     scanner = new Scanner    ( socket.getInputStream() );
        PrintWriter writer  = new PrintWriter( socket.getOutputStream(), true );

        writer.println( "Not in Here" );

        String result = scanner.nextLine();
        assertEquals( "Incorrect result", "NO", result );

        socket.close();
    }
    catch (IOException e) {
        e.printStackTrace();
        fail( "Error opening client socket" );
    }
}

@Test(timeout=3000)
public void testServerWith1LetterPalindrome() {
    try {
        // run client
        Socket      socket  = new Socket( "localhost", 5150 );
        Scanner     scanner = new Scanner    ( socket.getInputStream() );
        PrintWriter writer  = new PrintWriter( socket.getOutputStream(), true );

        writer.println( "Z" );

        String result = scanner.nextLine();
        assertEquals( "Incorrect result", "YES", result );

        socket.close();
    }
    catch (IOException e) {
        e.printStackTrace();
        fail( "Error opening client socket" );
    }
}

@Test(timeout=3000)
public void testServerWithPalindrome() throws IOException {
    try {
        // run client
        Socket      socket  = new Socket( "localhost", 5150 );
        Scanner     scanner = new Scanner    ( socket.getInputStream() );
        PrintWriter writer  = new PrintWriter( socket.getOutputStream(), true );

        writer.println( "Kayak" );

        String result = scanner.nextLine();
        assertEquals( "Incorrect result", "YES", result );

        socket.close();
    }
    catch (IOException e) {
        e.printStackTrace();
        fail( "Error opening client socket" );
    }
}

@Test(timeout=3000)
public void testServerWithPerfectPalindrome() throws IOException {
    try {
        // run client
        Socket      socket  = new Socket( "localhost", 5150 );
        Scanner     scanner = new Scanner    ( socket.getInputStream() );
        PrintWriter writer  = new PrintWriter( socket.getOutputStream(), true );

        writer.println( "Able was I ere I saw Elba" );

        String result = scanner.nextLine();
        assertEquals( "Incorrect result", "YES", result );

        socket.close();
    }
    catch (IOException e) {
        e.printStackTrace();
        fail( "Error opening client socket" );
    }
}

@Test(timeout=3000)
public void testServerWithCapitalizedPalindrome() throws IOException {
    try {
        // run client
        Socket      socket  = new Socket( "localhost", 5150 );
        Scanner     scanner = new Scanner    ( socket.getInputStream() );
        PrintWriter writer  = new PrintWriter( socket.getOutputStream(), true );

        writer.println( "I prefer PI" );

        String result = scanner.nextLine();
        assertEquals( "Incorrect result", "YES", result );

        socket.close();
    }
    catch (IOException e) {
        e.printStackTrace();
        fail( "Error opening client socket" );
    }
}

@Test(timeout=3000)
public void testServerWithNonSense() throws IOException {
    try {
        // run client
        Socket      socket  = new Socket( "localhost", 5150 );
        Scanner     scanner = new Scanner    ( socket.getInputStream() );
        PrintWriter writer  = new PrintWriter( socket.getOutputStream(), true );

        writer.println( "I want my mojo back!" );

        String result = scanner.nextLine();
        assertEquals( "Incorrect result", "NO", result );

        socket.close();
    }
    catch (IOException e) {
        e.printStackTrace();
        fail( "Error opening client socket" );
    }
}

@Test(expected = IOException.class)
public void test_RunsLast_ServerShutsDown() throws IOException {
    try {
        // running client #1...shuts down server
        Socket      socket  = new Socket( "localhost", 5150 );
        PrintWriter writer  = new PrintWriter( socket.getOutputStream(), true );

        writer.println( "SHUT DOWN" );

        socket.close();
    }
    catch (IOException e) {
        e.printStackTrace();
        fail( "Error opening client socket" );
    }
    waitTwoSecondsBetweenTests();

    // running client #2...should throw exception (server should have stopped)
    new Socket( "localhost", 5150 );
    fail( "Socket should not connect after server was shut down" );
}
错误

扫描
没有“找到行”
(NoTouchElementException)
,因为您正在关闭
客户端
。循环完成迭代后,等待关闭客户端

while(scan.hasNextLine()) {
   ...

   if(in.equals(out)){
       writer.print("YES");
   }
   else{
       writer.print("NO");
   }

   ...
}

client.close();

不可以。没有人可以解释未发布的错误消息。我现在收到一个java.lang.Exception:在进行更改后3000毫秒后测试超时
while(scan.hasNextLine()) {
   ...

   if(in.equals(out)){
       writer.print("YES");
   }
   else{
       writer.print("NO");
   }

   ...
}

client.close();