lpr-b:ilserver
no way to compare when less than two revisions
Differenze
Queste sono le differenze tra la revisione selezionata e la versione attuale della pagina.
| — | lpr-b:ilserver [19/11/2007 alle 15:12 (18 anni fa)] (versione attuale) – creata Sonia Campa | ||
|---|---|---|---|
| Linea 1: | Linea 1: | ||
| + | <code java> | ||
| + | package nfs; | ||
| + | import java.io.FileInputStream; | ||
| + | import java.io.FileNotFoundException; | ||
| + | import java.io.FileOutputStream; | ||
| + | import java.io.IOException; | ||
| + | import java.io.InputStream; | ||
| + | import java.io.OutputStream; | ||
| + | import java.net.DatagramPacket; | ||
| + | import java.net.DatagramSocket; | ||
| + | import java.net.SocketException; | ||
| + | import java.util.HashMap; | ||
| + | |||
| + | public class NfsServer { | ||
| + | |||
| + | public static final int port = 23232; | ||
| + | public static int key=0; | ||
| + | private HashMap< | ||
| + | |||
| + | public NfsServer() { | ||
| + | handles = new HashMap< | ||
| + | } | ||
| + | |||
| + | public DatagramPacket open(RemotePacket rp) { | ||
| + | DatagramPacket dp = null; | ||
| + | int mapkey=key++; | ||
| + | String strkey=null; | ||
| + | boolean err=false; | ||
| + | InputStream is=null; | ||
| + | OutputStream os=null; | ||
| + | |||
| + | try { | ||
| + | is = new FileInputStream(rp.getArgs()[0]); | ||
| + | os = new FileOutputStream(rp.getArgs()[0], | ||
| + | } catch (FileNotFoundException e) { | ||
| + | err=true; | ||
| + | } | ||
| + | // a fresh handle is needed for avoiding double entries | ||
| + | strkey = new String(rp.getArgs()[0]+" | ||
| + | if (err){ | ||
| + | dp = RemotePacket.RemotePacket(" | ||
| + | }else{ | ||
| + | handles.put(strkey, | ||
| + | dp = RemotePacket.RemotePacket(" | ||
| + | } | ||
| + | dp.setAddress(rp.dp.getAddress()); | ||
| + | dp.setPort(rp.dp.getPort()); | ||
| + | return dp; | ||
| + | } | ||
| + | |||
| + | public DatagramPacket read(RemotePacket rp) { | ||
| + | DatagramPacket dp = null; | ||
| + | String handleref = rp.getArgs()[0]; | ||
| + | System.out.println(" | ||
| + | StreamRef | ||
| + | if(sr == null) { | ||
| + | dp = RemotePacket.RemotePacket(" | ||
| + | } else { | ||
| + | InputStream is = sr.getIn(); | ||
| + | int len = Integer.parseInt(rp.getArgs()[1]); | ||
| + | byte [] buffer = new byte[len]; | ||
| + | try { | ||
| + | int letti = is.read(buffer, | ||
| + | if (letti==-1) | ||
| + | // the file is empty | ||
| + | letti=0; | ||
| + | byte [] buf = new byte[letti]; | ||
| + | for(int i=0; i<letti; i++) | ||
| + | buf[i] = buffer[i]; | ||
| + | dp = new DatagramPacket(buf, | ||
| + | } catch (IOException e) { | ||
| + | e.printStackTrace(); | ||
| + | dp = RemotePacket.RemotePacket(" | ||
| + | } | ||
| + | } | ||
| + | dp.setAddress(rp.dp.getAddress()); | ||
| + | dp.setPort(rp.dp.getPort()); | ||
| + | return dp; | ||
| + | } | ||
| + | |||
| + | public DatagramPacket close(RemotePacket rp) { | ||
| + | DatagramPacket dp = null; | ||
| + | StreamRef sr = handles.get(rp.getArgs()[0]); | ||
| + | if (sr==null){ | ||
| + | dp = RemotePacket.RemotePacket(" | ||
| + | } else { | ||
| + | InputStream is = sr.getIn(); | ||
| + | OutputStream os = sr.getOut(); | ||
| + | try { | ||
| + | is.close(); | ||
| + | os.close(); | ||
| + | handles.remove(rp.getArgs()[0]); | ||
| + | dp = RemotePacket.RemotePacket(" | ||
| + | } catch (IOException e) { | ||
| + | dp = RemotePacket.RemotePacket(" | ||
| + | } | ||
| + | |||
| + | } | ||
| + | dp.setAddress(rp.dp.getAddress()); | ||
| + | dp.setPort(rp.dp.getPort()); | ||
| + | return dp; | ||
| + | } | ||
| + | |||
| + | |||
| + | private DatagramPacket write(RemotePacket rp) { | ||
| + | // the rp.getArgs() contains the handle and the content to be written | ||
| + | DatagramPacket dp = null; | ||
| + | String handleref = rp.getArgs()[0]; | ||
| + | StreamRef sr = handles.get(handleref); | ||
| + | if (sr==null) { | ||
| + | dp = RemotePacket.RemotePacket(" | ||
| + | } else { | ||
| + | OutputStream os = sr.getOut(); | ||
| + | String msg_err=null; | ||
| + | byte [] buffer = (rp.getArgs()[1]).getBytes(); | ||
| + | try { | ||
| + | os.write(buffer); | ||
| + | os.flush(); | ||
| + | os.close(); | ||
| + | } catch (IOException e) { | ||
| + | msg_err = e.toString(); | ||
| + | } | ||
| + | if (msg_err!=null) | ||
| + | buffer = (" | ||
| + | else | ||
| + | buffer = "OK \n" | ||
| + | |||
| + | dp = new DatagramPacket(buffer, | ||
| + | } | ||
| + | dp.setAddress(rp.dp.getAddress()); | ||
| + | dp.setPort(rp.dp.getPort()); | ||
| + | return dp; | ||
| + | } | ||
| + | |||
| + | |||
| + | /** | ||
| + | * @param args | ||
| + | */ | ||
| + | public static void main(String[] args) { | ||
| + | |||
| + | try { | ||
| + | // create the server socket | ||
| + | DatagramSocket ds = new DatagramSocket(port); | ||
| + | NfsServer processor = new NfsServer(); | ||
| + | // process requests | ||
| + | while (true) { | ||
| + | DatagramPacket dp = new DatagramPacket(new byte[UDPServerComm.LIMIT], | ||
| + | System.out.println(" | ||
| + | ds.receive(dp); | ||
| + | // process the request | ||
| + | |||
| + | RemotePacket rp = new RemotePacket(dp); | ||
| + | System.out.println(" | ||
| + | |||
| + | if(rp.getOp().equals(" | ||
| + | ds.send(processor.open(rp)); | ||
| + | } | ||
| + | if(rp.getOp().equals(" | ||
| + | ds.send(processor.close(rp)); | ||
| + | } | ||
| + | if(rp.getOp().equals(" | ||
| + | ds.send(processor.read(rp)); | ||
| + | } | ||
| + | // go processing next request | ||
| + | if(rp.getOp().equals(" | ||
| + | ds.send(processor.write(rp)); | ||
| + | } | ||
| + | System.out.println(rp.getOp()+" | ||
| + | } | ||
| + | } catch (SocketException e) { | ||
| + | e.printStackTrace(); | ||
| + | } catch (IOException e) { | ||
| + | e.printStackTrace(); | ||
| + | } | ||
| + | |||
| + | } | ||
| + | } | ||
| + | </ | ||
lpr-b/ilserver.txt · Ultima modifica: 19/11/2007 alle 15:12 (18 anni fa) da Sonia Campa
