下面中一个例子,用到了多线程.
import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; class ServerOneJabber extends Thread { private Socket socket; private BufferedReader in; private PrintWriter out; public ServerOneJabber(Socket s) throws IOException { socket = s; in = new BufferedReader(new InputStreamReader(socket.getInputStream())); // auto flush out = new PrintWriter(new BufferedWriter(new OutputStreamWriter( socket.getOutputStream())), true); start(); } public void run() { try { while (true) { String str = in.readLine(); if (str.equals("END")) break; System.out.println("Ecoh:" + str); out.println(str); } System.out.println("closing"); ; } catch (IOException e) { // TODO: handle exception } finally { try { socket.close(); } catch (IOException e2) { // TODO: handle exception } } } } public class MultiJabberServer { static final int PORT = 8080; public static void main(String args[]) throws IOException { ServerSocket s = new ServerSocket(PORT); System.out.println("server start"); try { while (true) { Socket socket = s.accept(); try { new ServerOneJabber(socket); } catch (IOException e) { socket.close(); } } } finally { s.close(); } } }
然后是客户端
import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.net.InetAddress; import java.net.Socket; import java.security.cert.TrustAnchor; class JabberClientThread extends Thread{ private final int PORT =8080 ; private Socket socket ; private BufferedReader in ; private PrintWriter out ; private static int counter =0; private int id =counter++ ; private static int threadcount =0; public static int threadCount (){ return threadcount ; } public JabberClientThread (InetAddress addr){ System.out.println("making client id:"+ id) ; threadcount ++ ; try { socket = new Socket(addr,PORT ) ; } catch (IOException e) { // TODO: handle exception } try { in = new BufferedReader( new InputStreamReader(socket.getInputStream())); out = new PrintWriter(new BufferedWriter( new OutputStreamWriter( socket.getOutputStream())) , true) ; } catch (Exception e) { try { socket.close() ; } catch (Exception e2) { // TODO: handle exception } } } 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 (Exception e) { // TODO: handle exception }finally{ try { socket.close() ; } catch (IOException e2) { threadcount --;//end this thread } } } } public class MultiJabberClient { static final int MAX_THREAD =40; public static void main (String args []) throws IOException, InterruptedException{ InetAddress addr = InetAddress.getByName(null); while (true){ if (JabberClientThread.threadCount()<MAX_THREAD){ new JabberClientThread(addr) ; } } } }
时间: 2024-10-12 11:09:14