|
多线程 | Java | 2948 次查看 |
|---|---|---|
|
||
//ServeOneSocket.java 服务端源程序 import java.io.*; import java.net.*; public class ServeOneSocket extends Thread { private Socket socket; private BufferedReader in; private PrintWriter out; private String content; /** * Constructor */ public ServeOneSocket(Socket s,String c)throws IOException { socket=s; content=c; in=new BufferedReader( new InputStreamReader( socket.getInputStream())); //enable auto-flush out=new PrintWriter( new BufferedWriter( new OutputStreamWriter( socket.getOutputStream())),true); start();//calls run() } public void run(){ try{ while (true){ String str=in.readLine(); if (str.equals("END"))break; System.out.println("Echoing:"+str); out.println(str); out.println(content); } System.out.println("Closing..."); }catch(IOException e){ }finally{ try{ socket.close(); }catch(IOException e){} } } } //SocketClientThread.java 客户端源程序 import java.net.*; import java.io.*; class SocketClientThread extends Thread{ private Socket socket; private BufferedReader in; private PrintWriter out; private static int counter=0; private int id=counter++; private static int threadcount=0; final int port=8110; public static int threadCount(){ return threadcount; } public SocketClientThread(InetAddress addr){ System.out.println("Making client:"+id); threadcount++; try{ socket=new Socket(addr,port); }catch(IOException e){ } try{ in=new BufferedReader( new InputStreamReader( socket.getInputStream())); out=new PrintWriter( new BufferedWriter( new OutputStreamWriter( socket.getOutputStream())),true); start(); }catch(IOException e){ try{ socket.close(); }catch(IOException e2){} } } public void run(){ try{ for (int i=0;i<25;i++){ out.println("Client:"+id+":"+i); String str=in.readLine(); System.out.println(str); } out.println("END"); }catch(IOException e){ }finally{ try{ socket.close(); }catch(IOException e){} threadcount--; } } } public class MultiSocketClient { static final int MAX_THREADS=10; /** * main * @param args */ public static void main(String[] args)throws IOException,InterruptedException { InetAddress addr=InetAddress.getByName(null); while (true){ if (SocketClientThread.threadCount() new SocketClientThread(addr); Thread.currentThread().sleep(100); } } } |
||