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

📄 chatoneclient.java

📁 是一个简单的客户端,服务器的聊天程序,可实现客户端和服务器的连接,并实现多方聊天
💻 JAVA
字号:
import java.net.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.io.*;

public class ChatOneClient
{
	public static void main(String[] args)
	{
		ChatClient objServer = new ChatClient();
		objServer.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		objServer.setVisible(true);
	}
}

class ChatClient extends JFrame implements Runnable
{
	JTextField m_tfIpAddr;
	JButton m_btnConn;
	JTextArea m_taMsg;
	JTextArea m_taSend;
	JButton m_btnSend;
	Thread m_tdClient;
	Socket m_skConn;
	InputStream m_streamIn;
	OutputStream m_streamOut;	
	ChatClient m_objMainFrame;

	DataManager m_objDbManager;
	
	ChatClient()
	{
		setTitle("ChatClient");
		setSize(480, 600);
		setResizable(false);
		setLayout(new BorderLayout());
		
		Dimension scnSize = Toolkit.getDefaultToolkit().getScreenSize();
		setLocation(scnSize.width / 2 - this.getWidth() / 2, scnSize.height / 2 - this.getHeight() /2);
		m_objMainFrame = this;

		m_tfIpAddr = new JTextField("localhost", 15);
		m_btnConn = new JButton("Connect");
		m_taMsg = new JTextArea(15, 40);
		m_taSend = new JTextArea(5, 40);
		m_btnSend = new JButton("Send");
		JPanel panelCenter = new JPanel(new FlowLayout(FlowLayout.CENTER));

		ListenBtn listenConnSend = new ListenBtn();
		m_btnConn.addActionListener(listenConnSend);
		m_btnSend.addActionListener(listenConnSend);

		panelCenter.add(m_tfIpAddr);
		panelCenter.add(m_btnConn);
		panelCenter.add(m_taMsg);
		panelCenter.add(m_taSend);
		panelCenter.add(m_btnSend);
		this.add(panelCenter, BorderLayout.CENTER);
		
		m_objDbManager = new DataManager();
		m_btnSend.setEnabled(false);
	}
	
	public void run()
	{
		byte[] sbRead = new byte[1024];
		int iRead;
		String strRead;

		try
		{
			while(true)
			{
				iRead = m_streamIn.read(sbRead);
				strRead = new String(sbRead, 0, iRead);
				m_taMsg.append("Server:\n");
				m_taMsg.append(strRead + "\n");
				m_objDbManager.saveContext("Client", strRead);
			}
		}
		catch(Exception exp)
		{
			System.out.println("Database Error");
			System.out.println(exp.getMessage());
		}
	}
	
	private class ListenBtn implements ActionListener
	{
		String strMsg;
		
		public void actionPerformed(ActionEvent evt)
		{
			if(evt.getSource() == m_btnSend)
			{
				try
				{
					if(m_streamOut != null)
					{
						strMsg = m_taSend.getText();
						m_streamOut.write(strMsg.getBytes());
						m_taMsg.append("Client:\n" + strMsg + "\n");
						m_objDbManager.saveContext("Client", strMsg);
					}
				}
				catch(Exception exp)
				{
					System.out.println("Database Error");
					System.out.println(exp.getMessage());
				}

				m_taSend.setText("");
			}
			else if(evt.getSource() == m_btnConn)
			{
				try
				{
					if(m_skConn != null)
					{
						m_skConn.close();
					}
					
					m_skConn = new Socket(m_tfIpAddr.getText(), 4088);
					m_streamIn = m_skConn.getInputStream();
					m_streamOut = m_skConn.getOutputStream();
					if(m_tdClient != null)
					{
						m_tdClient.interrupt();
					}
					m_tdClient = null;
					m_tdClient = new Thread(m_objMainFrame);
					m_tdClient.start();
					
					m_btnConn.setEnabled(false);
					m_btnSend.setEnabled(true);
				}
				catch(Exception exp)
				{
					System.out.println("Connection failed.");
					System.out.println(exp.getMessage());
				}
			}
		}
	}
}










⌨️ 快捷键说明

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