/******************************************************************************* * MINHA - Java Virtualized Environment * Copyright (c) 2011, Universidade do Minho * All rights reserved. * * Contributors: * - Jose Orlando Pereira <jop@di.uminho.pt> * - Nuno Alexandre Carvalho <nuno@di.uminho.pt> * - Joao Paulo Bordalo <jbordalo@di.uminho.pt> * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program 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 General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ******************************************************************************/ package examples.net.socket; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.net.InetAddress; import java.net.ServerSocket; import java.net.Socket; /* * Echo server/client over TCP. * * MINHA command line: * java -cp lib/asm-all-3.3.1.jar:build/minha.jar sim.Runner examples.net.socket.EchoServer 5000, -d=1 examples.net.socket.EchoClient 10.0.0.1 5000 * */ class Worker implements Runnable { private Socket s; public Worker(Socket s) { this.s = s; } @Override public void run() { try { System.out.println("Worker started: " + this.s.toString()); BufferedReader in = new BufferedReader(new InputStreamReader(s.getInputStream())); BufferedWriter out = new BufferedWriter(new OutputStreamWriter(s.getOutputStream())); String line; while ((line = in.readLine()) != null) { out.write(line); out.newLine(); out.flush(); } } catch (IOException e) { e.printStackTrace(); } } } class TCPServer implements Runnable { private ServerSocket ss; public TCPServer(int port, InetAddress bindAddr) throws IOException { this.ss = new ServerSocket(port, 0, bindAddr); } @Override public void run() { try { System.out.println(ss.toString() + " waiting connections..."); while (true) { Socket s = ss.accept(); System.out.println("Server: connection from " + s.toString()); new Thread(new Worker(s)).start(); } } catch (IOException e) { e.printStackTrace(); } } } public class EchoServer { public static void main(String[] args) throws IOException { int port = Integer.parseInt(args[0]); Thread s = new Thread(new TCPServer(port, null)); s.start(); } }