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

📄 chatclient.java

📁 简易聊天室
💻 JAVA
字号:
package Com.handou.Client;

import java.awt.BorderLayout;
import java.awt.Frame;
import java.awt.Label;
import java.awt.TextArea;
import java.awt.TextField;
import java.awt.event.*;
import java.net.Socket;
import java.net.SocketException;
import java.net.UnknownHostException;

import java.io.*;

import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;

public class ChatClient extends Frame{

	Socket client=null;
	DataOutputStream dos=null;
	DataInputStream dis=null;
	boolean isConnection = false;//是否已连接服务器标志
	TextField send = new TextField(50);//发送消息文本框
	TextArea rec = new TextArea(25,40);//接受消息文本框
	TextField login =new TextField(48);//登录姓名文本框
	TextArea online = new TextArea(25,20);//在线用户显示文本框
//	String temp = null;//存放临时字符串
	/**
	 * @param args
	 */
	Thread rev = new Thread(new ReadMessage());
	
	public static void main(String[] args) {
		new ChatClient().launchFrame(); 
	}
	
	public void launchFrame(){
		//设置窗体属性
		this.setTitle("寒豆简易聊天室客户端");
		//this.setLocation(200,300);
		this.setVisible(true);
		
		//在窗体上添加面板
		JPanel head = new JPanel();
		JPanel body = new JPanel();
		JPanel feet = new JPanel();
		head.setVisible(true);
		body.setVisible(true);
		feet.setVisible(true);
		
		this.add(head,BorderLayout.NORTH);
		this.add(body,BorderLayout.CENTER);
		this.add(feet,BorderLayout.SOUTH);
		
		//添加菜单栏
		JMenuBar opBar = new JMenuBar();
		JMenu op = new JMenu();
//		JMenu edit = new JMenu();
		Label loginname = new Label("登录名:"); //登录名标签
		
		op.setText("操作");
		JMenuItem loginItem = new JMenuItem();
		loginItem.setText("  登录");
		loginItem.addActionListener(new LoginListener());
		JMenuItem exitItem = new JMenuItem();
		exitItem.setText("  退出");
		exitItem.addActionListener(new ExitListener());
		op.add(loginItem);
		op.add(exitItem);
		
//		edit.setText("编辑");
//		JMenuItem copyItem = new JMenuItem();
//		copyItem.setText("  复制");
//		copyItem.addActionListener(new CopyListener());
//		JMenuItem pasteItem = new JMenuItem();
//		pasteItem.setText("  粘贴");
//		pasteItem.addActionListener(new PasteListener());
//		
		opBar.add(op);
//		opBar.add(edit);
		login.addActionListener(new LoginListener());
		head.add(opBar,BorderLayout.WEST);
		head.add(loginname,BorderLayout.CENTER);
		head.add(login,BorderLayout.EAST);
		
		
		//添加发送消息框和接受消息框
		rec.setEditable(false);
		rec.setFocusable(false);
		send.addActionListener(new ClientListener());
		body.add(rec,BorderLayout.WEST);
		body.add(online,BorderLayout.EAST);
		Label messageLabel = new Label("输入发送消息:");
		feet.add(messageLabel,BorderLayout.WEST);
		feet.add(send,BorderLayout.CENTER);
		this.addWindowListener(new WindowAdapter()
	{
		public void windowClosing(WindowEvent args0){
			desConnection();
			System.exit(0);
		}
	}
		);
		pack();
	
		//connection();
		//rev.start();
	}
	
	private class LoginListener implements ActionListener{//登录监听

		@Override
		public void actionPerformed(ActionEvent e) {//登录响应事件
			String loginname=login.getText().trim();
			if(!(loginname.equals(""))){
				login.setEditable(false);
			connection();
			rev.start();} 
		}
		
	}
	
	private class ExitListener implements ActionListener{//退出监听
		@Override
		public void actionPerformed(ActionEvent arg0) {//退出响应事件
			if(isConnection){
				isConnection = false;
				desConnection();
				System.exit(0);
			}else{
				System.exit(0);
			}	
		}
	}
	
	private void connection(){//连接服务器
		try{
			client=new Socket("127.0.0.1",8888);
			dos=new DataOutputStream(client.getOutputStream());
			dis=new DataInputStream(client.getInputStream());
System.out.println("connected");
			isConnection = true;
			sendMessage(login.getText());
		}catch(UnknownHostException e){
			e.printStackTrace();
		}catch(IOException e1){
			e1.printStackTrace();
		}
	}
	
//	private class CopyListener implements ActionListener{
//
//		@Override
//		public void actionPerformed(ActionEvent arg0) {
//		
//			
//		}
//		
//	}
//	
//	private class PasteListener implements ActionListener{
//
//		@Override
//		public void actionPerformed(ActionEvent arg0) {
//		
//			
//		}
//		
//	}
//	
	private class ReadMessage implements Runnable{//启用线程,读入服务器端发送过来的消息
		
		public void run() {
			try{
				while(isConnection){
				String st= dis.readUTF();
				rec.setText(rec.getText()+ st+"\n");
				}
			}catch(SocketException e){
				System.out.println("BYE-BYE");
			}catch(IOException e){
				e.printStackTrace();
			}
			finally{
				if(dis != null)
					try {
						dis.close();
					} catch (IOException e) {
						e.printStackTrace();
					}
			}
		}

		
	}
	
	private class ClientListener implements ActionListener{//发送消息监听

		@Override
		public void actionPerformed(ActionEvent arg0) {//发送消息响应事件
			String str = send.getText().trim();
			send.setText("");
			if(client != null){
				String str1 = login.getText()+"说:";
				str = str1 + str;
				sendMessage(str);
			}else{
				rec.setText("请先登录!");
			}
			//String rectext = rec.getText()+"\n";s
		}
		
	}
	
	private void sendMessage(String str){//发送消息方法
		
		try{
			dos.writeUTF(str);
			dos.flush();
		}catch(IOException e1){
			e1.printStackTrace();
		}
	}
	
	public void desConnection(){//断开连接方法
		try{
			if(dos != null)dos.close();
			if(client != null)client.close();
			if(dis != null)dis.close();
		}catch(Exception e2){
			e2.printStackTrace();
		}
		finally {
			try {
				if(dos != null)dos.close();
				if(dis != null)dis.close();
				if(client != null)client.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}


}

⌨️ 快捷键说明

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