请教各位:
  1.有一个一直在服务器端运行的后台服务程序,例如:
ServerSocket serverSocket = new ServerSocket(10005);
  2.假如设置最大允许10个客户端来连接此服务器,如果当系统有10个客户端在连接时,就不允许第11个以后的客户来连接。 请问怎么实现这个程序。最好附上代码,谢谢各位。

解决方案 »

  1.   

    传说中的java socket高手呢。请现身!
      

  2.   

    // 服务器程序
    import java.net.*;
    import java.io.IOException;
    public class TCPServerDemo {
    static int count=0;
    public final int MAX_CONNECT = 10;
    static boolean bRunning = true;
    public static void main(String[] args){

    try{
    ServerSocket ss = new ServerSocket(8003);

    //boolean bRunning = true;

    while(bRunning){

    Socket s = ss.accept();
    synchronized(count){
    if (count >= MAX_CONNECT)
    {
    try{
    PrintWriter out = new PrintWriter(s.getOutputStream());
    // 超出最大用户限制
    out.println("ERR_MAXUSER_EXTENDS..");
    out.flush();
    s.close();
    log("Connection refused to " + s.getInetAddress().getHostAddress() + ":" + s.getPort() + ": max connections reached.");

    }
    catch(IOException e){

    e.printStackTrace();
    }
    }
    else {
    if(s!=null)
    count++;
    new Thread( new Servicer(s)).start();
    }
    }
    }

    ss.close();

    }catch(IOException e){

    e.printStackTrace();
    }

    }
    }// 处理客户请求
    import java.net.*;
    import java.io.*;public class Servicer implements Runnable {
    private Socket s;

    public Servicer(Socket s){

    this.s = s;
    }

    public void run(){

    try{
    InputStream ips = s.getInputStream();
    OutputStream ops = s.getOutputStream();

    BufferedReader br = new BufferedReader( new InputStreamReader(ips));
    PrintWriter pw = new PrintWriter(ops,true);
    while(true){

    String strLine = br.readLine();

    if(strLine.equalsIgnoreCase("quit")){

    TCPServerDemo.count--;
    if(TCPServerDemo.count==0)
    TCPServerDemo.bRunning = false;
    break;
    }
    System.out.println(strLine+"From"+s.getInetAddress().toString()+":"+s.getPort());
    String strEcho = (new StringBuffer(strLine).reverse()).toString();
    pw.println(strLine +"------>"+strEcho);
    }

    br.close();
    pw.close();

    s.close();
    }
    catch(IOException e){
     
    e.printStackTrace();
    }
    }
    }// ...
    import java.net.*;
    import java.io.*;public class TCPServer {

    public static void main(String[] args){

    try{
    ServerSocket ss = new ServerSocket(8003);
    Socket s = ss.accept();

    InputStream ips = s.getInputStream();
    OutputStream ops = s.getOutputStream();

    ops.write("Hello World".getBytes());

    BufferedReader bf = new BufferedReader(new InputStreamReader(ips));

    System.out.println(bf.readLine());

    bf.close();
    ops.close();
    s.close();
    ss.close();
    }
    catch(IOException e)
    {
    e.printStackTrace();
    }
    }
    }以上三个文件已经大概描述了如何控制.
      

  3.   

    运行:
    java TCPServerDemo打开另一个命令窗口,输入:
    telnet 127.0.0.1 8003即可和服务器通信.再打开一个命令窗口,再输入:
    telnet 127.0.0.1 8003又可以和服务器通信最多连接10个
      

  4.   

    // 修改过..
    import java.net.*;
    import java.io.*;
    public class TCPServerDemo {
    static int count=0;
    public static final int MAX_CONNECT = 10;
    static boolean bRunning = true;
    public static void main(String[] args){

    try{
    ServerSocket ss = new ServerSocket(8003);

    //boolean bRunning = true;

    while(bRunning){

    Socket s = ss.accept();

    if (count >= MAX_CONNECT)
    {
    try{
    PrintWriter out = new PrintWriter(s.getOutputStream());
    // 超出最大用户限制
    out.println("ERR_MAXUSER_EXTENDS..");
    out.flush();
    s.close();
    }
    catch(IOException e){

    e.printStackTrace();
    }
    }
    else {
    if(s!=null)
    count++;
    new Thread( new Servicer(s)).start();
    }

    }

    ss.close();

    }catch(IOException e){

    e.printStackTrace();
    }

    }
    }