⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 chatroomclient.java

📁 在本地局域网机器上实现的简单聊天室程序
💻 JAVA
字号:
package ChatRoom;

import java.awt.BorderLayout;
import java.awt.Font;
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 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;
import javax.swing.JTextField;

public class ChatRoomClient {
	private JFrame frame;
	private JTextArea area;
	private JLabel label;
	private JTextField field;
	private JButton button;
	private Socket s;
	private String userName;
	private BufferedReader br;
	private PrintWriter pw;
	
	public ChatRoomClient(){
		frame=new JFrame();
		area=new JTextArea(15,30);
		label=new JLabel();
		field=new JTextField(30);
		button=new JButton("发送");
		createConnection();
		init();
		addEventHandler();
	}
	
	private void createConnection(){
		String hostName,port;
		do {
			hostName = JOptionPane.showInputDialog(frame, "请输入服务器地址:");
			if(hostName==null)
				System.exit(0);
			port = JOptionPane.showInputDialog(frame, "请输入端口号:");
			if(port==null)
				System.exit(0);
			try {
				s = new Socket(hostName, Integer.parseInt(port));
				pw=new PrintWriter(s.getOutputStream(),true);
				br=new BufferedReader(new InputStreamReader(s.getInputStream()));
			} catch (IOException e) {
				JOptionPane.showMessageDialog(frame, "连接参数不正确,请重新输入!");
			}
		} while (s==null);	
		frame.setTitle("聊天室客户端v1.0  IP:"+hostName+"  "+"Port:"+port);
		userName=JOptionPane.showInputDialog(frame,"请输入用户名:");
		label.setText(userName+":");
		pw.println(userName);
	}
	
	
	private void init(){
		field.setFont(new Font("",Font.BOLD,20));
		area.setFont(new Font("",Font.BOLD,24));
		JScrollPane jsp=new JScrollPane(area);
		JPanel panel=new JPanel();
		panel.add(label);
		panel.add(field);
		panel.add(button);
		
		frame.add(jsp,BorderLayout.CENTER);
		frame.add(panel,BorderLayout.SOUTH);
		
	}
	
	private void addEventHandler(){
		button.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent arg0) {
				//得到field中的内容,将其写入到pw中,userName+":"+field.getText()
				//将field清空
				String str=field.getText().trim();
				if(str.trim().equals("")){
					JOptionPane.showMessageDialog(frame,"请输入字符!");
					field.setText("");
					return;
				}
				
				else if(str.equalsIgnoreCase("%GOODBYE%")){
					int i=JOptionPane.showConfirmDialog(frame,"是否退出聊天室?","确认退出",JOptionPane.YES_NO_OPTION);
					if(i==0){
						pw.println(userName+":%GOODBYE%");					
						try {
							pw.close();
							Thread.sleep(200);
							br.close();
							s.close();
						} catch (InterruptedException e) {
							e.printStackTrace();
						} catch (IOException e) {
							// TODO Auto-generated catch block
							e.printStackTrace();
						} finally{
							System.exit(0);
						}
						
					}
					else{
						field.setText("");
						return;
					}
				}
				else
			    pw.println(userName+":"+str);
				field.setText("");
			}
		});
		
		frame.addWindowListener(new WindowAdapter(){
			public void windowClosing(WindowEvent arg0) {
				//弹出对话框询问是否确定退出?
				//给服务器发送退出请求:userName+":%GOODBYE%"
				//等待200毫秒,再关闭socket,退出程序。
				int i=JOptionPane.showConfirmDialog(frame,"是否退出","确认退出",JOptionPane.YES_NO_OPTION);
				if(i==0){
					pw.println(userName+":%GOODBYE%");					
					try {
						pw.close();
						Thread.sleep(200);
						br.close();
						s.close();
						
					} catch (InterruptedException e) {
						e.printStackTrace();
					} catch (IOException e) {
						e.printStackTrace();
					} finally{
						System.exit(0);
						
					}
					
				}
				
			}
		});
	}
	
	public void showMe(){
		frame.setLocation(500,400);
		frame.pack();
		frame.setVisible(true);
		frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
		new Thread(){
			public void run(){
				String str;
				try {
					while (true) {
	
						str = br.readLine();
						if(str==null){
							JOptionPane.showMessageDialog(frame, "已与服务器断开连接,请重新登录!");
							System.exit(0);
						}
						else	
						    area.append(str + "\n");
					}
				} catch (IOException e) {
					JOptionPane.showMessageDialog(frame, "已与服务器断开连接,请重新登录!");
					System.exit(0);
				}
			}
		}.start();
	}
	
	public static void main(String[] args){
		new ChatRoomClient().showMe();
	}
	

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -