请教各位:
1.有一个一直在服务器端运行的后台服务程序,例如:
ServerSocket serverSocket = new ServerSocket(10005);
2.假如设置最大允许10个客户端来连接此服务器,如果当系统有10个客户端在连接时,就不允许第11个以后的客户来连接。 请问怎么实现这个程序。最好附上代码,谢谢各位。
1.有一个一直在服务器端运行的后台服务程序,例如:
ServerSocket serverSocket = new ServerSocket(10005);
2.假如设置最大允许10个客户端来连接此服务器,如果当系统有10个客户端在连接时,就不允许第11个以后的客户来连接。 请问怎么实现这个程序。最好附上代码,谢谢各位。
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();
}
}
}以上三个文件已经大概描述了如何控制.
java TCPServerDemo打开另一个命令窗口,输入:
telnet 127.0.0.1 8003即可和服务器通信.再打开一个命令窗口,再输入:
telnet 127.0.0.1 8003又可以和服务器通信最多连接10个
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();
}
}
}