Java局域网聊天系统(服务器客户端一对一)


两个Java工程       1.Client             2.Server


Client   下 4个JAVA文件   一个db.properties(用来存储用户账号密码),调用集合,实现验证用户登录


1.File.java   

 package pkg;

import java.io.FileInputStream;
import java.io.InputStream;
import java.util.Properties;

public class File {
   
//根据KEY 得到 值
public static String getValue(String key)
{//创建集合类
Properties p=new Properties();

try{ //读取文件 并将该文件写入IO流
InputStream readDB=File.class.getClassLoader().getResourceAsStream("db.properties");
p.load(readDB);       //将读取的文件赋给Properties 自动获取key-value功能
return p.getProperty(key,null);
}catch(Exception e)
{
e.printStackTrace();
}
return null;
}
public static boolean checkLogin(String uname,String pwd)
{
String username=File.getValue("username");
String password=File.getValue("pwd");
if(username.equals(uname) && password.equals(pwd))
{
return true;
}
return false;
}
}

2.登录界面  DengLu.java

package pkg;


import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;


import javax.swing.Box;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SwingConstants;




public class DengLu extends JFrame{
public JButton btDengLu;
public JButton btZhuCe;

public JTextField tfZhangHao;
public JTextField tfMiMa;

public JLabel jb1;
public JLabel jb2;

public JPanel tPanel;
public JPanel idPanel; 
public JPanel pwdPanel;
public JPanel ButtonPanel;
public Box center=Box.createVerticalBox();




public static void main(String[] args)
{
DengLu client=new DengLu();
}
public  DengLu(){
super("三毛聊天");
btDengLu=new JButton("登录");
btZhuCe=new JButton("注册");
jb1=new JLabel("账号:");
jb2=new JLabel("密码:");



tfZhangHao=new JTextField(10);
tfMiMa=new JTextField(10);

idPanel=new JPanel();
pwdPanel=new JPanel();
ButtonPanel=new JPanel();
tPanel=new JPanel();

idPanel.add(jb1);
idPanel.add(tfZhangHao);

pwdPanel.add(jb2);
pwdPanel.add(tfMiMa);

ButtonPanel.add(btDengLu);
ButtonPanel.add(btZhuCe);


center.add(tPanel);
center.add(idPanel);
center.add(pwdPanel);

btDengLu.addActionListener(new ActionListener(){


@Override
public void actionPerformed(ActionEvent arg0) {

String username=tfZhangHao.getText();
String pwd=tfMiMa.getText();
System.out.println(username+pwd);
boolean b=File.checkLogin(username,pwd);
System.out.println();
if(b==true)
{
new ChatClientUI(username); //显示聊天窗口
DengLu.this.dispose();//关闭登录窗口
}
else
{
JOptionPane.showMessageDialog(null, "账号或密码错误!");
}
   

}

});
btZhuCe.addActionListener(new ActionListener(){


@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub

}

});
this.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e)
{
int a=JOptionPane.showConfirmDialog(null, "确定关闭吗?","温馨的提示",JOptionPane.YES_NO_CANCEL_OPTION);
if(a==1){
System.exit(0);
}
}
});
        
center.add(ButtonPanel);
this.add(center);
this.pack();
this.showFrame();
}
public void showFrame()
{
//获取屏幕大小
int Width=(int)this.getToolkit().getScreenSize().getWidth();
int Height=(int)this.getToolkit().getScreenSize().getHeight();
int x=(Width-300)/2;
int y=(Height-300)/2;

this.setSize(300,300);
this.setLocation(x,y);
this.setResizable(false);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
}


}


3.ChatClientUI     聊天界面


package pkg;


import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;


import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
// 1  构造
// 2  初始化
// 3  拼装组件
// 4 监听
// 5 显示
public class ChatClientUI extends JFrame {
private int height=600,width=560; //主窗口的高度和宽度
private ImageIcon showUserImage=null;  //User
private JPanel showMsgPanel=null,inputMsgPanel=null;
private JTextArea showMsgField=null,inputMsgField=null;
private JButton sendMsgBtn=null;
private JLabel showUserImageLabel=null,showUsernameLabel=null;
private Client client;
private String username=null;
public ChatClientUI(String username)
{
this.username=username;
initUI();
addComponment();
addListener();
showUI();
client=new Client(showMsgField);
}
public void initUI()

//初始化多项文本框
showMsgField=new JTextArea(30,32); //显示消息文本框
showMsgField.setEditable(false); //设置多文本框不能编辑
inputMsgField=new JTextArea(5,32); //显示输入消息文本框
//对多行文本框设置换行
showMsgField.setLineWrap(true); //激活自动换行功能
showMsgField.setWrapStyleWord(true); //断行不断字
showMsgField.setAutoscrolls(true);

inputMsgField.setLineWrap(true); //激活自动换行功能
inputMsgField.setWrapStyleWord(true); //断行不断字
inputMsgField.setAutoscrolls(true);

sendMsgBtn=new JButton("发送消息");
  //设置User  加载资源
  showUserImage=new ImageIcon("images/zhou.png");
  //初始化Label
  showUserImageLabel=new JLabel(showUserImage,JLabel.CENTER);
//showUsernameLabel
  showUsernameLabel=new JLabel("欢迎你"+this.username,JLabel.CENTER);
  //JPanel
  showMsgPanel=new JPanel();
  inputMsgPanel=new JPanel();
}
public void addComponment()
{
this.setLayout(null); //默认布局为空
showMsgPanel.add(new JScrollPane(showMsgField));
this.add(showMsgPanel);
showMsgPanel.setBounds(5,3,width-200,height-250);  //设置左顶点坐标(5,3)  和组件 width,height

inputMsgPanel.add(new JScrollPane(inputMsgField));

this.add(inputMsgPanel);
inputMsgPanel.setBounds(5,height-230,width-200,100);
//发送按钮
this.add(sendMsgBtn);
sendMsgBtn.setBounds(width-300, height-120, 100, 30);
//将图片放入label
showUserImageLabel.setIcon(showUserImage);
this.add(showUserImageLabel);
showUserImageLabel.setBounds(width-180,10,width-400,266);

//showUsernameLabel

this.add(showUsernameLabel);
showUsernameLabel.setBounds(width-180,400,200,30);
}
public void addListener()
{
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//点击发送按钮,获取输入文本框内 的 信息 ,发送到网络
sendMsgBtn.addActionListener(new ActionListener(){


public void actionPerformed(ActionEvent arg0){
String msg=inputMsgField.getText();
if(msg==null&&msg.trim().length()<1)
{JOptionPane.showMessageDialog(null, "消息不能为空");}
else
{client.sendMsgToClient(inputMsgField.getText());
inputMsgField.setText("");
}

}});

}
public void showUI()
{
this.setTitle("客户端:"+this.username);
//设置logo
this.setIconImage(new ImageIcon("images/QQ.png").getImage());
//获取屏幕大小
int Width=(int)this.getToolkit().getScreenSize().getWidth();
int Height=(int)this.getToolkit().getScreenSize().getHeight();
int x=(Width-this.width)/2;
int y=(Height-this.height)/2;
this.setLocation(x,y);
this.setResizable(false);//不可重新定义大小

this.setSize(width,height);
this.setVisible(true);
}

}

4.Client .java    客户端文件

package pkg;


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintStream;
import java.net.Socket;
import java.net.UnknownHostException;


import javax.swing.JTextArea;


public class Client {


BufferedReader br=null;
PrintStream ps=null;
JTextArea showMsgField=null;
public Client(JTextArea showMsgField)
{
this.showMsgField=showMsgField;
initClient();
getMsg();
}
public void initClient()
{
try {
//客户端创建Socket
Socket socket=new Socket("127.0.0.1",1025);
OutputStream os=socket.getOutputStream(); //输出流(二进制)
ps=new PrintStream(os);   



InputStream is=socket.getInputStream();
//转成文本流
br=new BufferedReader(new InputStreamReader(is));
} catch (UnknownHostException e) {

e.printStackTrace();
} catch (IOException e) {

e.printStackTrace();
}

}
public void sendMsgToClient(String msg)
{
ps.println(msg);
//我发送的消息
showMsgField.append("张永超:"+msg+"\n");
}
//开启新线程   读取信号
public void getMsg()
{
new Thread(new Runnable(){



public void run() {

while(true)
{
try {
String msg=br.readLine();
//把获得的字符串追加大显示文本框中
showMsgField.append("三毛:"+msg+"\n");
} catch (IOException e) {
e.printStackTrace();


}
}

}).start();
}
}


服务器  文件

ChatServerUI.java

package pkg;


import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;


import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
// 1  构造
// 2  初始化
// 3  拼装组件
// 4 监听
// 5 显示
public class ChatServerUI extends JFrame {
private int height=600,width=560; //主窗口的高度和宽度
private ImageIcon showUserImage=null;  //User
private JPanel showMsgPanel=null,inputMsgPanel=null;
private JTextArea showMsgField=null,inputMsgField=null;
private JButton sendMsgBtn=null;
private JLabel showUserImageLabel=null,showUsernameLabel=null;
private Server server;
private String username=null;
public ChatServerUI(String username)
{
this.username=username;
initUI();
addComponment();
addListener();
showUI();

//创建完界面  开始建立网络
server=new Server(showMsgField);
}
public void initUI()

//初始化多项文本框
showMsgField=new JTextArea(30,32); //显示消息文本框
showMsgField.setEditable(false); //设置多文本框不能编辑
inputMsgField=new JTextArea(5,32); //显示输入消息文本框
//对多行文本框设置换行
showMsgField.setLineWrap(true); //激活自动换行功能
showMsgField.setWrapStyleWord(true); //断行不断字
showMsgField.setAutoscrolls(true);

inputMsgField.setLineWrap(true); //激活自动换行功能
inputMsgField.setWrapStyleWord(true); //断行不断字
inputMsgField.setAutoscrolls(true);

sendMsgBtn=new JButton("发送消息");
  //设置User  加载资源
  showUserImage=new ImageIcon("images/wu.png");
  //初始化Label
  showUserImageLabel=new JLabel(showUserImage,JLabel.CENTER);
//showUsernameLabel
  showUsernameLabel=new JLabel("欢迎你"+this.username,JLabel.CENTER);
  //JPanel
  showMsgPanel=new JPanel();
  inputMsgPanel=new JPanel();
}
public void addComponment()
{
this.setLayout(null); //默认布局为空
showMsgPanel.add(new JScrollPane(showMsgField));
this.add(showMsgPanel);
showMsgPanel.setBounds(5,3,width-200,height-250);  //设置左顶点坐标(5,3)  和组件 width,height

inputMsgPanel.add(new JScrollPane(inputMsgField));

this.add(inputMsgPanel);
inputMsgPanel.setBounds(5,height-230,width-200,100);
//发送按钮
this.add(sendMsgBtn);
sendMsgBtn.setBounds(width-300, height-120, 100, 30);
//将图片放入label
showUserImageLabel.setIcon(showUserImage);
this.add(showUserImageLabel);
showUserImageLabel.setBounds(width-180,10,width-400,266);

//showUsernameLabel

this.add(showUsernameLabel);
showUsernameLabel.setBounds(width-180,400,200,30);
}
public void addListener()
{
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//点击发送按钮,获取输入文本框内 的 信息 ,发送到网络
sendMsgBtn.addActionListener(new ActionListener(){


public void actionPerformed(ActionEvent arg0){
String msg=inputMsgField.getText();
if(msg==null&&msg.trim().length()<1)
{JOptionPane.showMessageDialog(null, "消息不能为空");}
else
{server.sendMsgToClient(inputMsgField.getText());
inputMsgField.setText("");
}

}});
}
public void showUI()
{
this.setTitle("服务器管理员:"+this.username);
//设置logo
this.setIconImage(new ImageIcon("images/QQ.png").getImage());
//获取屏幕大小
int Width=(int)this.getToolkit().getScreenSize().getWidth();
int Height=(int)this.getToolkit().getScreenSize().getHeight();
int x=(Width-this.width)/2;
int y=(Height-this.height)/2;
this.setLocation(x,y);
this.setResizable(false);//不可重新定义大小

this.setSize(width,height);
this.setVisible(true);
}
public static void main(String[] args)
{
new ChatServerUI("三毛");
}
}

Server.java

package pkg;


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.ServerSocket;
import java.net.Socket;


import javax.swing.JOptionPane;
import javax.swing.JTextArea;


public class Server {


BufferedReader br=null;
PrintStream ps=null;
JTextArea showMsgField=null;
public Server(JTextArea showMsgField)
{
this.showMsgField=showMsgField;
initServer();//监听端口 
getMsg();   //开心线程   接收信息
}
public void initServer()
{
try {
//服务器监听端口
ServerSocket serverSocket=new ServerSocket(1025);
//服务器监听用户进入,否者等待       返回socket类型
Socket socket=serverSocket.accept();
//接收进来的二进制数据  
InputStream is=socket.getInputStream();
//转成文本流
br=new BufferedReader(new InputStreamReader(is));
   
//向网络上发送消息
ps=new PrintStream(socket.getOutputStream());
  } catch (IOException e) {
e.printStackTrace();
JOptionPane.showMessageDialog(null, "端口被占用");
}
}
//向网络上发送消息

public void sendMsgToClient(String msg)
{
ps.println(msg);
showMsgField.append("三毛:"+msg+"\n");
}
//开启新线程   读取信号
public void getMsg()
{
new Thread(new Runnable(){



public void run() {

while(true)
{
try {
String msg=br.readLine();
//把获得的字符串追加大显示文本框中
showMsgField.append("张永超:"+msg+"\n");
} catch (IOException e) {
e.printStackTrace();


}
}

}).start();
}
}


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值