简单实现多人聊天:
1:启动服务器
2:启动客户端
3:服务器用集合来接收客户
4:客户端发送信息
5:服务器接收客户端消息
6:服务器发送给其他客户端
7:其他客户端接收服务器消息
思路总结:运用网络读写包,客户端发送消息,通过服务器转发给其他客户端,其他客户端接收服务器消息就可以简单实现多人聊天
运用到的知识点:网络包,io读写流,多线程
/*
* 服务器
* */
public class Gwa {
public static void main(String[] args) throws Exception {
//启动服务器
ServerSocket ss=new ServerSocket(1122);
System.out.println("服务器已启动,等待客户端上线");
Vector<Socket> vc=new Vector<Socket>();
while (true){
Socket sk= ss.accept();
vc.add(sk);
//服务器线程
new Ss1(sk,vc).start();
}
}
/*
* 客户端
* */
public class Myc {
public static void main(String[] args) throws Exception{
Socket sk=new Socket(InetAddress.getByName("127.0.0.1"),1122);
System.out.println("已上线");
new read(sk).start();
new wread(sk).start();
}
/*
* 写入
* */
public class wread extends Thread{
private Socket sk=null;
public wread(Socket sk) {
this.sk = sk;
}
Scanner may=new Scanner(System.in);
@Override
public void run() {
while (true){
try {
//写
OutputStream os= sk.getOutputStream();
OutputStreamWriter osw=new OutputStreamWriter(os);
BufferedWriter bw=new BufferedWriter(osw);
System.out.println("请输入你要发送的消息:");
String str=may.next();
if(str!=null){
bw.write(str);
bw.newLine();
bw.flush();
}
if("bye".equals(str)){
break;
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
/*
* 转发
* */
public class Ss1 extends Thread {
Socket sk=null;
Vector<Socket> vc=null;
//使用集合来接收客户端
public Ss1(Socket sk, Vector<Socket> vc) {
this.sk=sk;
this.vc=vc;
}
@Override
public void run() {
while (true){
try {
//读
InputStream is= sk.getInputStream();
InputStreamReader isr=new InputStreamReader(is);
BufferedReader br=new BufferedReader(isr);
String str=br.readLine();
for (Socket s:vc) {
if(s!=null){
if(s!=sk){
//写
OutputStream os= s.getOutputStream();
OutputStreamWriter osw=new OutputStreamWriter(os);
BufferedWriter bw=new BufferedWriter(osw);
bw.write(str);
bw.newLine();
bw.flush();
}
}
}
if("bye".equals(str)){
sk.close();//发送消息
br.close();//读取消息
vc.remove(sk);//下线
break;
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
/*
* 读取
* */
public class read extends Thread{
private Socket sk=null;
public read(Socket sk) {
this.sk = sk;
}
@Override
public void run() {
while (true){
try {
//读
InputStream is=sk.getInputStream();
InputStreamReader isr=new InputStreamReader(is);
BufferedReader br=new BufferedReader(isr);
String str=br.readLine();
System.out.println("\t收到消息:"+str);
} catch (IOException e) {
e.printStackTrace();
}
}
}
}