本程序实现功能如下:
1.限制连接的客户数;
2.客户端发送数据给服务器,服务器负责将收到的信息转发到其他客户端.
//DateServer.java文件
import java.net.*;
import java.util.Date;
import java.util.*;
import java.io.*;class Operator extends Thread {
DateServer server;
Socket sr;
OutputStream out;
PrintStream ps;
List<Socket> clients;
public Operator(DateServer _server,Socket s,List<Socket> clients ) {
this.clients=clients;
server = _server;
this.sr = s;
}
public Operator() {}
public void run() {
try {
InputStream in = sr.getInputStream();
BufferedReader bin = new BufferedReader(new InputStreamReader(in));
String data = bin.readLine();
while (data != null) {
//将接收的信息转发出去
//打印接收的信息
System.out.println(data);
//继续读取接收
for(int j=0; j<clients.size(); j++)//服务器将它转发其他所有的客户端
{
Socket c1 = clients.get(j);
out = c1.getOutputStream();
ps = new PrintStream(out,true);
if(!c1.equals(sr))ps.println(">>"+clients.size()+ ":"+ data);
System.out.println("From Client: "+" " + data);
}
data = bin.readLine();
}//end of whilebin.close();
ps.close();
sr.close();
} catch (Exception e) {
e.printStackTrace();
} finally {
server.delCount();
}
}//end of run
}// end of class Operatorpublic class DateServer {
ServerSocket ss;final int MAX_COUNT = 10;
int connectCount = 0;
List <Socket> clients = new ArrayList<Socket>();
public synchronized void addCount() {
connectCount++;
System.out.println("After addCount, connectCount=" + connectCount);
}public synchronized void delCount() {
connectCount--;
System.out.println("After delCount, connectCount=" + connectCount);
}public synchronized boolean isCountExceed() {
if (connectCount > MAX_COUNT)
return true;
else
return false;
}public static void main(String args[]) {
new DateServer().go();
}public void go() {
// Register your service on port 5678
try {
ss = new ServerSocket(5678);
} catch (IOException e) { }// Run the listen/accept loop forever
while (true) {
try {
while (isCountExceed()) {
try {
Thread.sleep(5000);
} catch (Exception e) {
}
}// Wait here and listen for a connection
Socket s= ss.accept();
clients.add(s);
System.out.println("accept one client");
addCount();
Operator ms = new Operator(this,s,clients);
ms.start();
} catch (Exception e) {
e.printStackTrace();
}
} //end of while loop
} //end of method go()
} //end of class DateServer//DateClient.java文件
import java.net.*;
import java.util.Date;
import java.io.*;
public class DateClient extends Thread{
//PrintStream OutputS;
Socket s1;
public static void main(String args[]){
PrintStream ps1;
DataInputStream KeyInput = new DataInputStream(System.in);
String sdata;
DateClient dc = new DateClient();
try {
dc.s1 = new Socket("127.0.0.1",5678);
} catch (UnknownHostException e1) {
e1.printStackTrace();
} catch (IOException e1) {
e1.printStackTrace();
}
dc.setName(args[0]);
dc.start();
while(true)
{
try {OutputStream out1 = dc.s1.getOutputStream();
ps1 = new PrintStream(out1,true);
sdata= KeyInput.readLine(); //以行形式读入
System.out.println(""+sdata);
ps1.println(args[0]+ ":"+sdata);
}
catch (IOException e){
return;}
}}
public void run() {
OutputStream out;
PrintStream ps;
try{
out = s1.getOutputStream();
ps = new PrintStream(out,true);
ps.println(getName()+ ":"+ new Date().toString()+" Connected");
System.out.println("send:"+getName()+ ":"+ new Date().toString());
//接收服务器转发来的消息
InputStream in = s1.getInputStream();
BufferedReader bin = new BufferedReader(new InputStreamReader(in));
String data = bin.readLine();while(data != null){
System.out.println(data);
data = bin.readLine();
}}catch(Exception e){
e.printStackTrace();
}
} //end of method go()
} //end of class DateClient()
相关专题
- 网络管理实用手册 (22883篇文章)
- 网络故障手册 (14810篇文章)
- 网络组网专题 (12805篇文章)
- 网络建设 (14350篇文章)
- Java环境安装配置 (5915篇文章)
- Java编程开发手册 (8606篇文章)
- Java的类 (932篇文章)
- JAVA网络 (488篇文章)
- Java应用开发篇 (1139篇文章)
- Java网络及通讯编程 (696篇文章)
- 自己写框架 (371次浏览)
- Spring框架概述 (244次浏览)
- Struts应用开发 (234次浏览)
- Struts 2, spring 2, hibernate 的整合 (175次浏览)
- OpenXava框架发布3.0版本 (117次浏览)
- Java应用中Hibernate对多表关联查询总结 (111次浏览)
- java字符串编码类型获取 (108次浏览)
- 100行Java代码构建一个线程池。 (107次浏览)
- 关于提高自己水平的十大技术 (89次浏览)
- hibernate 经验谈 (78次浏览)



