有关线程侦听多个socket连接的问题?

xiaogz 2005-12-20 04:39:17
请教各位:
1.有一个一直在服务器端运行的后台服务程序,例如:
ServerSocket serverSocket = new ServerSocket(10005);
2.假如设置最大允许10个客户端来连接此服务器,如果当系统有10个客户端在连接时,就不允许第11个以后的客户来连接。

请问怎么实现这个程序。最好附上代码,谢谢各位。
...全文
188 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
yuzl32 2005-12-21
  • 打赏
  • 举报
回复
// 修改过..
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();
}

}
}
yuzl32 2005-12-21
  • 打赏
  • 举报
回复
运行:
java TCPServerDemo

打开另一个命令窗口,输入:
telnet 127.0.0.1 8003

即可和服务器通信.

再打开一个命令窗口,再输入:
telnet 127.0.0.1 8003

又可以和服务器通信

最多连接10个
yuzl32 2005-12-21
  • 打赏
  • 举报
回复
// 服务器程序
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();
}
}
}

以上三个文件已经大概描述了如何控制.
xiaogz 2005-12-20
  • 打赏
  • 举报
回复
分都给你,你给我写源代码吧,
yuzl32 2005-12-20
  • 打赏
  • 举报
回复
建议看书,或者先把分给我,我再写个源代码给你. :) 楼主的信誉分实在是差强人意.
xiaogz 2005-12-20
  • 打赏
  • 举报
回复
传说中的java socket高手呢。请现身!

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧