62,614
社区成员
发帖
与我相关
我的任务
分享
package com.softeem.java1307se.net.many2many;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.ArrayList;
/**
* 发送线程
*
*
*/
public class M2MSend extends Thread {
//用户集合
private ArrayList<Socket> list = M2MServer.getList();
//当前用户
private Socket s;
public M2MSend(Socket s){
this.s = s;
}
public void run(){
//获取该用户 IP
String ip = s.getInetAddress().getHostAddress();
try {
//读取用户信息
BufferedReader reader = new BufferedReader(new InputStreamReader(s.getInputStream()));
//不断的读取写出数据
while(true){
//接收数据
String info = null;
//如果读取信息不为空
if((info=reader.readLine()) != null){
//遍历所有的在线用户,并且把信息发送过去
for(Socket ss : list){
//获取对象的输出流
PrintWriter pw;
pw = new PrintWriter(ss.getOutputStream());
//写入信息
pw.println(ip + " 说: " + info);
pw.flush();
}
}
}
} catch (IOException e1) {
//用户下线
list.remove(s);
System.err.println(ip + " 已下线 , 当前在线人数为: " + list.size() + " 人 !");
}
}
}
package com.softeem.java1307se.net.many2many;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.Socket;
/**
* 接收信息
*
*
*/
public class M2MReceive extends Thread {
private Socket s;
public M2MReceive(Socket s){
this.s = s;
}
public void run(){
try {
//构建输入流
BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));
//不断的接收信息
while(true){
String info = null;
//接收信息
if((info=br.readLine()) != null){
System.out.println(info);
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
package com.softeem.java1307se.net.many2many;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
/**
* 多对多 服务器
*
*
*/
public class M2MServer {
//用户集合
private static ArrayList<Socket> list = new ArrayList<Socket>();
public static void main(String[] args) {
//上线用户
Socket s = null;
//用户
String ip = null;
try {
//构建服务器对象
ServerSocket ss = new ServerSocket(1234);
//构建 用户集合
list = new ArrayList<Socket>();
System.out.println("服务器准备就绪 ...");
//循环监听
while(true){
//上线用户
s = ss.accept();
//上线的人都添加到 集合中
list.add(s);
//获取 Socket IP
ip = s.getInetAddress().getHostAddress();
System.err.println( ip + " 用户上线了 , 当前在线用户为: " + list.size() + "人 !" );
//构建 发送信息线程
M2MSend send = new M2MSend(s);
send.start();
}
} catch (IOException e) {
//用户下线
list.remove(s);
System.err.println(ip + " 已下线 , 当前在线人数为: " + list.size() + " 人 !");
}
}
public static ArrayList<Socket> getList() {
return list;
}
public static void setList(ArrayList<Socket> list) {
M2MServer.list = list;
}
}
package com.softeem.java1307se.net.many2many;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;
/**
* 多对多客户端
*
*
*/
public class M2MClient {
public static void main(String[] args) {
try {
//构建客户端对象
Socket s = new Socket("localhost",1234);
//先从键盘接收信息
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
//写入到 Socket 中
PrintWriter pw = new PrintWriter(s.getOutputStream());
//启动线程
M2MReceive receive = new M2MReceive(s);
receive.start();
while(true){
//用户输入信息
String info = null;
if((info=br.readLine()) != null){
//写出
pw.println(info);
pw.flush();
}
}
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}