局域网聊天系统-Java

这个局域网聊天系统,是为了能够在一个没有连接到intent的局域网中,进行聊天的一个程序。本程序包括服务器和客户机两部分,可以实现多人聊天和两个人私聊的一个工具。
开发语言:Java,开发工具:eclipse。
客户机代码如下:
Client.java

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.GridLayout;
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 java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.HashMap;
import java.util.Map;
import java.util.StringTokenizer;

import javax.swing.DefaultListModel;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JSplitPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.border.TitledBorder;

	public class Client{
   //客户端
	
	   JFrame frame;
	   JList<String> userList;//列表组件
	   JTextArea textArea;//文本域
	   JTextField textField;
	   JTextField txt_port,txt_Ip,txt_name;
	   
	   JButton button_start,button_stop,button_send;//连接按钮,断开按钮,发送按钮
	   
	   JPanel north,south;//上、下面板
	   JScrollPane rightScroll,leftScroll;//左右滚动面板
	   JSplitPane centerSplit;//分割面板
	   DefaultListModel<String> listModel;//点击事件
	    
	   private boolean crossFire = false;    
	
	   Socket socket;//套接字
	   PrintWriter writer;
	   BufferedReader reader;
	   MessageThread messageThread;// 负责接收消息的线程
	   private Map<String, User> onLineUsers = new HashMap<String, User>();// 所有在线用户集合
	    
	   public void send() {
   //发送方法
	        if (!crossFire) {
   
	            JOptionPane.showMessageDialog(frame, "Warning!无法连接服务器", "错误",JOptionPane.ERROR_MESSAGE);
	            return;
	        }
	        String message = textField.getText().trim();
	        if (message == null || message.equals("")) {
   
	            JOptionPane.showMessageDialog(frame, "Warning! 消息不能为空!", "错误",JOptionPane.ERROR_MESSAGE);
	            return;
	        }
	        sendMessage(frame.getTitle() + "@" + "ALL" + "@" + message);
	        textField.setText(null);
	   }
	
	   public Client() {
   //创建构造方法
	        textArea = new JTextArea();
	        textArea.setEditable(false);//设置文本域不可读
	        textArea.setForeground(Color.RED);//设置背景颜色位红色
	        
	        textField = new JTextField();
	        txt_port = new JTextField();//端口号
	        txt_Ip = new JTextField();//服务器IP
	        txt_name = new JTextField();//用户名
	        
	        button_start = new JButton("连接");
	        button_stop = new JButton("断开");
	        button_send = new JButton("发送");
	        
	        listModel = new DefaultListModel<String>();
	        userList = new JList<String>(listModel);
	
	        north = new JPanel();
	        north.setLayout(new GridLayout(1, 4));//设置布局方式
	        north.add(new JLabel("端口"));
	        north.add(txt_port);//在JPanel组件中添加端口组件
	        north.add(new JLabel("服务器IP:"));
	        north.add(txt_Ip);//在JPanel组件中添加IP组件 
	        north.add(new JLabel("姓名:"));
	        north.add(txt_name);//添加文本域组件
	        north.add(button_start);//添加按钮组件
	        north.add(button_stop);//添加按钮组件
	        north.setBorder(new TitledBorder("连接信息"));
	
	        rightScroll = new JScrollPane(textArea);
	        rightScroll.setBorder(new TitledBorder("聊天记录区"));
	        
	        leftScroll = new JScrollPane(userList);
	        leftScroll.setBorder(new TitledBorder("在线用户明细"));//设置组件的边框
	        
	        south = new JPanel(new BorderLayout());
	        south.add(textField, "Center");
	        south.add(button_send, "East");
	        south.setBorder(new TitledBorder("写消息"));
	
	        centerSplit = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, leftScroll,rightScroll);
	        centerSplit.setDividerLocation(100);//设置分隔条的相对位置
	
	        frame = new JFrame("客户端");
	        frame.add(north, "North");
	        frame.add(centerSplit, "Center");
	        frame.add(south, "South");
	        frame.setSize(750, 350);
	        
	        int screen_width = Toolkit.getDefaultToolkit().getScreenSize().width;//获取屏幕的宽度
	        int screen_height = Toolkit.getDefaultToolkit().getScreenSize().height;//获取屏幕的高度
	        frame.setLocation((screen_width - frame.getWidth()) / 2,(screen_height - frame.getHeight()) / 2);//设置窗口的相对位置
	        frame.setVisible(true);//设置组件可见
	        
	        // 写消息的文本框中按回车键时事件
	        textField.addActionListener(new ActionListener() {
   //添加监听,监听文本域消息
	            public void actionPerformed(ActionEvent arg0) {
   
	                send();
	            }
	        });
	
	        // 单击发送按钮时事件
	        button_send.addActionListener(new ActionListener() {
   //添加监听,监听发送按钮消息
	            public void actionPerformed(ActionEvent e) {
   
	                send();
	            }
	        });
	
	        // 单击连接按钮时事件
	        button_start.addActionListener(new ActionListener() {
   //添加监听,监听连接按钮消息
	            public void actionPerformed(ActionEvent e) {
   
	                int port;
	                if (crossFire) {
   
	                    JOptionPane.showMessageDialog(frame, "WARNING!  重复链接","错误", JOptionPane.ERROR_MESSAGE);
	                    return;
	                }
	                try {
   
	                    try {
   
	                        port = Integer.parseInt(txt_port.getText().trim());
	                    } catch (NumberFormatException e2) {
   
	                        throw new Exception("端口号错误!   端口应为整数!");
	                    }
	                    String hostIp = txt_Ip.getText().trim();
	                    String name = txt_name.getText().trim();
	                    if (name.equals("")) {
   
	                        throw new Exception(
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值