| |
一个socket服务的例子! 请高手指点无法捕捉的输出如何修改? //服务端 package org.dyol.net;
import java.net.*; import java.io.*; import java.util.*;
public class console { public static void main(string args[]){ if (args.length!=1) throw new illegalargumentexception("unlawful number of args:user: console "); new console(integer.parseint(args[0])); } public console(int port){ this.port = port; try { serversocket socket = new serversocket(port); system.out.println("start service on "+port); while(true){ new transmit(socket.accept()).start(); } }catch (ioexception e){} } private class transmit extends thread { private string sys = system.getproperty("os.name")+" "+system.getproperty("os.arch")+" "+system.getproperty("os.version"); private socket sock; public transmit(socket sock){ this.sock = sock; try { input = new bufferedreader(new inputstreamreader(sock.getinputstream(),"gb2312")); output = new printstream(sock.getoutputstream()); output.println(sys); }catch(exception e){} } public void run(){ system.out.println("while(true){ try { synchronized(output){ cmd = input.readline(); if( cmd == null ) break; system.out.println("start command"); system.out.println("[ "+new date().tostring()+" receive command from : "+sock.getinetaddress()+" ]: "+cmd); proc = runtime.getruntime().exec(cmd); dis = new bufferedreader(new inputstreamreader(proc.getinputstream(),"gb2312")); } synchronized(output){ while((msg = dis.readline())!=null){ if(msg.equals("exit".tolowercase()))break; output.println(msg); } } system.out.println("end command"); }catch (ioexception e){ break; } } system.out.println("end thread ---------------------->"); } } private int port = 520; private bufferedreader input; private printstream output; private string cmd; private process proc; private string msg; private bufferedreader dis ; }
//客户端 import java.io.*; import java.net.*;
public class client { public static void main(string[] args){ if (args.length != 2) throw new illegalargumentexception("wrong number of args"); string host = args[0]; int port = integer.parseint(args[1]); new client(host, port); } public client(string host,int port){ try { socket s = new socket(host, port); final bufferedreader echo=new bufferedreader(new inputstreamreader(s.getinputstream(),"gb2312")); printwriter ps = new printwriter(s.getoutputstream()); bufferedreader cmd = new bufferedreader(new inputstreamreader(system.in,"gb2312")); final printwriter pis = new printwriter(system.out, true); pis.println("connected to "+s.getinetaddress()+":" + s.getport()); thread t = new thread() { public void run() { char[] buffer = new char[1024]; int ch; try { while((ch = echo.read(buffer)) != -1) { for(int i = 0; i < ch; i++) { if (buffer[i] == '') pis.println(); else pis.print(buffer[i]); } pis.flush(); } }catch (ioexception e){ pis.println(e); } pis.println("connection closed by server."); system.exit(0); } }; t.setpriority(thread.currentthread().getpriority() + 1); t.start(); string line; while((line = cmd.readline()) != null) { ps.print(line + ""); ps.flush(); } s.close(); pis.println("connection closed by client."); system.exit(0); }catch (exception e) {} } }
|
|