//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()<MAX_THREADS) new SocketClientThread(addr); Thread.currentThread().sleep(100); } } }

|