• 网络编程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) ;
    			}
    		}
    	}
    	
    
    }
    

      

  • 相关阅读:
    Flask 开启跨域
    pandas to dict
    mongodb 聚合查询
    flask 获取请求参数
    CSS dppx详解
    用CSS做出漂亮的字体动画
    VMware虚拟主机安装完成后连接不上网络
    wokerman中自定义协议的使用和测试
    使用workerman写一个小的聊天室
    telnet不能使用怎么办?
  • 原文地址:https://www.cnblogs.com/chuiyuan/p/4379031.html
Copyright © 2020-2023  润新知