java ServerSocket

public Socket accept() //等待连接,该方法阻塞
public void close() //关闭服务器套接字

 

ServerSocket只连一次的程序

/* this is serversocket */
package test;

import java.io.*;
import java.net.*;

class ServerOne extends Thread{
        private Socket socket;
        private BufferedReader in;
        private PrintWriter out;
        public ServerOne(Socket s) throws IOException{
                socket = s;
                in =
                  new BufferedReader(
                        new InputStreamReader(
                                socket.getInputStream(),"UTF-8"));
                //Enbale auto-flush;
                out =
                  new PrintWriter(
                        new BufferedWriter(
                                new OutputStreamWriter(
                                        socket.getOutputStream(),"UTF-8")),true);
                start();
        }
        public void run(){
        try{
                while(true){
                        String str = in.readLine();
                        if(str.equals("END")) break;
                        System.out.println("Echoing:" + socket.getInetAddress());
                        out.println("str");
                        }
           }catch(IOException e){
           }finally{
                try{
                        socket.close();
                }catch(IOException e){
                }
           }
        }
}
public class MultiServer{
        static final int PORT = 5000;
        public static void main(String[] args)throws IOException{
                ServerSocket s = new ServerSocket(PORT);
                System.out.println("Server Started");
                try{
                  while(true){
                        Socket socket = s.accept();
                        try{
                          new ServerOne(socket);
                        }catch(IOException e){
                         socket.close();
                        }
                   }
                }finally{
                  s.close();
                }

        }}

 

多服务端程序实例

/* this is serversocket */
package socket;

import java.io.*;
import java.net.*;

class ServerOne extends Thread{
        private Socket socket;
        private BufferedReader in;
        private PrintWriter out;
        public ServerOne(Socket s) throws IOException{
                socket = s;
                in =
                  new BufferedReader(
                        new InputStreamReader(
                                socket.getInputStream(),"UTF-8"));
                //Enbale auto-flush;
                out =
                  new PrintWriter(
                        new BufferedWriter(
                                new OutputStreamWriter(
                                        socket.getOutputStream(),"UTF-8")),true);
                start();
        }
        public void run(){
        try{
                while(true){
                        String str = in.readLine();
                        if(str.equals("END")) break;
                        System.out.println("Echoing:" + socket.getInetAddress() + socket.getPort());
                        out.println(str);
                        }
           }catch(IOException e){
           }finally{
                try{
                        socket.close();
                }catch(IOException e){
                }
           }
        }
}
public class MultiServer{
        static final int PORT = 5000;
        public static void main(String[] args)throws IOException{
                ServerSocket s = new ServerSocket(PORT);
                System.out.println("Server Started");
                try{
                  while(true){
                        Socket socket = s.accept();
                        try{
                          new ServerOne(socket);
                        }catch(IOException e){
                         socket.close();
                        }
                   }
                }finally{
                  s.close();
                }
         }
}

 规定线程个数的服务器

//: MultiJabberClient.java 
// Client that tests the MultiJabberServer 
// by starting up multiple clients. 
import java.net.*; 
import java.io.*; 
 
class JabberClientThread 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; 
  public static int threadCount() {  
    return threadcount;  
  } 
  public JabberClientThread(InetAddress addr) { 
    System.out.println("Making client " + id); 
    threadcount++; 
    try { 
      socket =  
        new Socket(addr, MultiJabberServer.PORT); 
    } catch(IOException e) { 
      // If the creation of the socket fails,  
      // nothing needs to be cleaned up. 
    } 
    try {     
      in =  
        new BufferedReader( 
          new InputStreamReader( 
            socket.getInputStream())); 
       // Enable auto-flush: 
      out =  
        new PrintWriter( 
          new BufferedWriter( 
            new OutputStreamWriter( 
              socket.getOutputStream())), true); 
      start(); 
    } catch(IOException e) { 
      // The socket should be closed on any  
      // failures other than the socket  
      // constructor: 
      try { 
        socket.close(); 
      } catch(IOException e2) {} 
    } 
    // Otherwise the socket will be closed by 
    // the run() method of the thread. 
  } 
  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 { 
      // Always close it: 
      try { 
        socket.close(); 
      } catch(IOException e) {} 
      threadcount--; // Ending this thread 
    } 
  } 
} 
 
public class MultiJabberClient { 
  static final int MAX_THREADS = 40; 
  public static void main(String[] args)  
      throws IOException, InterruptedException { 
    InetAddress addr =  
      InetAddress.getByName(null); 
    while(true) { 
      if(JabberClientThread.threadCount()  
         < MAX_THREADS) 
        new JabberClientThread(addr); 
      Thread.currentThread().sleep(100); 
    } 
  } 
} ///:~ 

 

posted @ 2019-03-10 03:09  江期玉  阅读(312)  评论(0编辑  收藏  举报