/* * xtc - The eXTensible Compiler * Copyright (C) 2009-2011 New York University * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License * version 2.1 as published by the Free Software Foundation. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, * USA. */ package xtc.lang.cpp; import java.io.InputStreamReader; import java.io.BufferedReader; import java.io.FileReader; import java.io.DataOutputStream; import java.net.ServerSocket; import java.net.Socket; /** * A server that emits lines of a text file one at a time and a client * that receives them. Several clients can access the server and each * will get a unique line of the file. * * @author Paul Gazzillo * @version $Revision: 1.4 $ */ class FilenameService { public static void main(String args[]) { if (args.length < 3) { System.err.println( "USAGE: \n" + " java FilenameService -server port file\n" + " java FilenameService -client server port\n" + "\n" + "EXIT CODES:\n" + " 3 - no more files available\n" + " 4 - file server not reachable\n" + " 1 - other errors\n" + "" ); System.exit(0); } String mode = args[0]; if (mode.equals("-server")) { try { int port = Integer.parseInt(args[1]); String filelist = args[2]; BufferedReader br = new BufferedReader(new FileReader(filelist)); String filename = br.readLine(); ServerSocket server = new ServerSocket(port); while (null != filename) { Socket socket = server.accept(); DataOutputStream out = new DataOutputStream(socket.getOutputStream()); System.out.println(filename); out.writeBytes(filename); socket.close(); filename = br.readLine(); } // Once the files are done, the server writes out "$end" to show // that it's done. while (true) { Socket socket = server.accept(); DataOutputStream out = new DataOutputStream(socket.getOutputStream()); out.writeBytes("$end"); socket.close(); } } catch (java.io.IOException e) { e.printStackTrace(); System.exit(1); } } else if (mode.equals("-client")) { try { String server = args[1]; int port = Integer.parseInt(args[2]); Socket socket= new Socket(server, port); BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream())); String filename = in.readLine(); if (filename.equals("$end")) { socket.close(); System.exit(3); } System.out.println(filename); socket.close(); } catch (java.net.ConnectException e) { e.printStackTrace(); System.exit(4); } catch (java.io.IOException e) { e.printStackTrace(); System.exit(1); } } else { System.err.println("invalid flag"); } } }