Server端
package com.et.server;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
//群聊天服务端
public class Server {
//用来接收加入进来的客户端
private static ArrayList<Socket> list=new ArrayList<Socket>();
public static void main(String[] args) throws IOException {
ServerSocket server=new ServerSocket(9999);
while(true){
Socket socket=server.accept();
list.add(socket);
//System.out.println(socket.getInetAddress().getHostAddress()+":上线了");
//为每一个客户端开通一条服务线程
new ServerThread(socket,list).start();
}
}
}
package com.et.server;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.util.ArrayList;
//服务器处理socket的多线程
public class ServerThread extends Thread {
Socket socket;
ArrayList<Socket> list;
InputStream is;
OutputStream os;
public ServerThread(Socket socket,ArrayList<Socket> list) {
super();
this.socket = socket;
this.list=list;
}
@Override
public void run() {
try {
while (true) {
is = socket.getInputStream();
byte[] b = new byte[1024];
int len =is.read(b);
String str = new String(b, 0, len);
String ip = socket.getInetAddress().getHostAddress();
//System.out.println(ip);
//为每一个客户端发送数据
for (Socket socket : list) {
os =socket.getOutputStream();
os.write((ip + "推送群消息:" +"\n"+ str).getBytes());
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
Client端
package com.et.client;
import java.io.IOException;
import java.net.Socket;
import java.net.UnknownHostException;
//群聊天客户端
public class Client {
public static void main(String[] args) throws UnknownHostException, IOException {
//创建套接字对象
Socket socket=new Socket("192.168.5.123",9999);
//发送信息线程
new ThreadWriter(socket).start();
//接收信息线程
new ThreadReader(socket).start();
}
}
package com.et.client;
import java.io.IOException;
import java.io.InputStream;
import java.net.Socket;
//读取服务端发送的消息
public class ThreadReader extends Thread{
Socket socket;
public ThreadReader(Socket socket) {
super();
this.socket = socket;
}
@Override
public void run() {
try{
while(true){
InputStream is=socket.getInputStream();
byte[] b=new byte[1024];
int len =is.read(b);
String str=new String(b,0,len);
System.out.println(str);
}
}catch(IOException e){
e.printStackTrace();
}
}
}
package com.et.client;
import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;
import java.util.Scanner;
//发送消息给服务端
public class ThreadWriter extends Thread{
Socket socket;
public ThreadWriter(Socket socket) {
super();
this.socket = socket;
}
@Override
public void run() {
try{
Scanner sc=new Scanner(System.in);
while(true){
System.out.println("请输入");
String str=sc.next();
OutputStream os=socket.getOutputStream();
os.write(str.getBytes());
}
}catch(IOException e){
e.printStackTrace();
}
}
}