网络编程server

下面中一个例子,用到了多线程.

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) ;
			}
		}
	}
	

}

  

原文地址:https://www.cnblogs.com/chuiyuan/p/4379031.html