我正在尝试编写一个简单的客户端 - 服务器程序。服务器将有4个独立的客户端,这意味着4个不同的输入流 - 输出流(我不应该使用线程)。服务器应该做的唯一事情就是给每个客户端写一条消息(一次一个)。我面临的问题是,最后一个客户端无法从服务器获取消息(前3个消息正确)。我收到错误:"线程中的异常" main" java.util.NoSuchElementException:找不到行"。
我想我应该提一下,我多次运行代码,其中一些从服务器发送的消息正确传递。
问题出在哪里?
抱歉英文不好 这是我的代码: 对于服务器::
公共课SServer {
/**
* @param args the command line arguments
*/
private ArrayList<Socket> clients = new ArrayList<Socket>();
private ArrayList<PrintWriter> pw = new ArrayList<PrintWriter>();
int port;
public SServer(int port)
{
this.port = port;
}
public void start() throws InterruptedException
{
Socket tmps ;
try {
System.out.println("ready to accept connections!");
ServerSocket serversocket = new ServerSocket(port);
for(int i=0;i<4;i++)
{
tmps = serversocket.accept();
clients.add(tmps);
PrintWriter toPlayer1 = new PrintWriter(tmps.getOutputStream(),true);
pw.add(toPlayer1);
}
for(int i=0;i<4;i++)
{
System.out.println("sending message to client " +i);
System.out.println(pw.get(i).toString());
pw.get(i).println("hello client "+i);
pw.get(i).flush();
}
} catch (IOException ex) {
Logger.getLogger(SServer.class.getName()).log(Level.SEVERE, null, ex);
}
}
public static void main(String[] args)
{
SServer myserver = new SServer(7777);
try {
myserver.start();
} catch (InterruptedException ex) {
Logger.getLogger(SServer.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
对于客户端::
公共类SClient {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
// TODO code application logic here
try (Socket echoSocket = new Socket("localhost", 7777);
PrintWriter toServer = new PrintWriter(echoSocket.getOutputStream(), true);
Scanner fromServer = new Scanner(echoSocket.getInputStream()) ) {
Scanner keyboard = new Scanner(System.in);
String response = fromServer.nextLine();
System.out.println("Response: " + response);
fromServer.close();
toServer.close();
}
catch (UnknownHostException ex) {
System.err.println(ex);
}
catch (IOException ex) {
System.err.println(ex);
}
}
}