服务器是用java写的,放在eclips中运行
public class MyServer {
public static ArrayList<Socket> listSocket = new ArrayList<>();
//将客户端添加到集合中
public static void main(String[] args) {
try {
ServerSocket server = new ServerSocket(7567);//服务器启动
while(true) {
Socket socket = server.accept();//监听,等待连接,一旦有client端连接便创建socket实例
String time = getCurrentTime();//获取当前时间
System.out.println(time);
System.out.println("ip:" + socket.getInetAddress().getHostAddress() + " port:" + socket.getPort() +" 加入聊天室");
listSocket.add(socket);
new Thread(new ChatThread(socket)).start();
}
}catch(Exception e) {
e.printStackTrace();
System.out.println("服务器崩溃");
}
}
static String getCurrentTime() {
Date d = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
return sdf.format(d);
}
class ChatThread implements Runnable{
private Socket socket;
private OutputStream out;
private InputStream reader;
public ChatThread(Socket socket) throws IOException{
this.socket = socket;
}
public void run() {
try {
int len;
byte[] arr = new byte[1024 * 6];
reader = socket.getInputStream();
while((len = reader.read(arr)) != -1) {
String line = new String(arr,0,len) + "\n";
for(Iterator<Socket> it = MyServer.listSocket.iterator();it.hasNext();) {//使用迭代器进行遍历集合
Socket st = it.next();
try {
if(st.equals(socket)) {
continue;
}
String line1 = new String(arr,0,len,"utf-8");//接收的内容转化为"utf-8",防止中文乱码
out = st.getOutputStream();
out.write(line1.getBytes("utf-8"));//防止中文乱码
}catch(Exception e ) {
System.out.println(MyServer.getCurrentTime() + " " + st.getPort() + " 退出群聊");
it.remove();
MyServer.listSocket.remove(st);
}
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
效果如下图:
在启动客户端之前先要启动服务器。服务器是手动开启和关闭的