从服务器写入java中的多个输出流

时间:2014-07-12 21:30:08

标签: java client-server

我正在尝试编写一个简单的客户端 - 服务器程序。服务器将有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);
    }
}

}

0 个答案:

没有答案