功能设计1.0
一、服务器端
1、启动服务器端打开服务器端窗口
2、创建ServerSocket,循环监听客户端连接
3、存储连接到服务器端的多个Socket
4、接收客户端发送的信息(接收线程)
5、将接收到的消息发给所有客户端socket
6、关闭服务器
二、客户端
1、打开登录界面(窗口)
2、输入信息验证,验证消息
3、消息验证通过后,创建客户端Socket连接服务器
4、连接到服务器后,关闭登录窗口,打开聊天窗口
5、输入聊天信息(验证),发送聊天信息
6、客户端接收服务器发送过来的聊天(接收线程)
7、关闭客户端
先将jar包导入idea中
服务端
import javax.swing.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
import java.util.Iterator;
public class ServerFrame extends JFrame {
ArrayList <Socket> sockets=new ArrayList<>();
ServerSocket serverSocket;
/* public void creatServerframe(){
this.setSize(600,600);
this.setLocationRelativeTo(null);///设置窗口居中
this.setTitle("服务端");
this.setResizable(false);//不能设置大小
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//关闭按钮选项
this.setIconImage(new ImageIcon("D:\\图\\图片1.png").getImage());//图标
JPanel jp=new JPanel();
this.setVisible(true);
this.add(jp);
}*/
public void startserver() {
this.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
try {
serverSocket.close();
JOptionPane .showMessageDialog(null,"服务器退出","判断",JOptionPane.ERROR_MESSAGE);
} catch (IOException ioException) {
}
}
});
try {
serverSocket =new ServerSocket(9999);
int count =0;
while (true){
Socket socket=serverSocket.accept();
sockets.add(socket);
new SocketThread(socket).start();
count++;
System.out.println(count+"次连接");
System.out.println("连接成功");
}
} catch (IOException e) {
JOptionPane.showMessageDialog(null,"请输入账号","标题",JOptionPane.INFORMATION_MESSAGE);
}
// new SocketThread().start();
}
//让socket专门接收自己客户端信息
class SocketThread extends Thread{
Socket client;
DataInputStream din;
//DataOutputStream don;
public SocketThread(Socket client) throws IOException {
this.client = client;
this.din=new DataInputStream(client.getInputStream());
// this.don=new DataOutputStream(client.getOutputStream());
}
@Override
public void run() {
boolean flag =true;
while (flag){
try {
String msg =din.readUTF();
System.out.println(msg);
Iterator<Socket> item =sockets.iterator();
while (item.hasNext()){
Socket ss=item.next();
if(ss.isClosed()){
item.remove();
continue;
}else {
DataOutputStream don =new DataOutputStream(ss.getOutputStream());
don.writeUTF(msg);
//don.close();
}
}
} catch (IOException e) {
e.printStackTrace();
flag=false;
sockets.remove(client);
System.out.println("客户端下线了");
}
}
}
}
}
import java.net.ServerSocket;
public class ServerRun {
public static void main(String[] args) {
ServerFrame serverFrame =new ServerFrame();
serverFrame.startserver();
// serverFrame.creatServerframe();
}
}
登录框架
import com.java.ff.LoginDao;