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

📄 ext7_client.java

📁 1) 利用InetAddress类的方法获取主机的名称和IP地址。 2) 利用URL类获取网络资源。 3) 使用Socket编程:客户机发送数据到服务器
💻 JAVA
字号:
import java.io.*;
import javax.swing.*;
import java.net.*;
import java.awt.*;
import java.awt.event.*;

public class Ext7_Client extends JFrame implements ActionListener
{
	int ServerPort=5000;//使用5000端口进行文本聊天
	String ServerIp;//转换为字符串IP
	String ClientName;//转换为字符串用户名
	JLabel Tips1,Tips2;//提示信息“请输入服务器的IP”,“请输入你的名字”
	JTextField SIP;//输入服务端的IP地址
	JTextField CName;//输入用户名字
	JTextField Message;//用来写消息
	JTextArea MessageWindow;//显示聊天记录
	JPanel Panel1;//客户端布局
	JScrollPane Pane;//
	JButton Connect;//连接服务器
	JButton Send;//发送消息
	JCheckBox Share;

	BufferedReader Min;//输入流
	PrintWriter Mout;//输出流
	Socket Client;//进行Socket连接

	public Ext7_Client()
	{
		super("客户端");
		enableEvents(AWTEvent.WINDOW_EVENT_MASK);//用于选择窗口事件的事件掩码。
		setSize(800,700);
		setVisible(true);
		JOptionPane.showMessageDialog(null,"欢迎使用本聊天室","",JOptionPane.INFORMATION_MESSAGE);


		//****************************************************************
		//对JFrame进行布局
		//*****************************************************************
		Panel1=new JPanel();
		Panel1.setBackground(new Color(100,100,100));
		add(Panel1);
		this.setResizable(false);

		Tips1=new JLabel("请输入服务器IP:");
		Panel1.add(Tips1);
		SIP=new JTextField("",15);
		Panel1.add("East",SIP);

		Tips2=new JLabel("请输入用户名:");
		Panel1.add(Tips2);
		CName=new JTextField("",15);
		Panel1.add("East",CName);

		Connect=new JButton("连接");
		Connect.addActionListener(this);
		Panel1.add("East",Connect);

		Message=new JTextField(40);
		Message.addKeyListener(new koLis());//设置键盘监听,实现按回车就可以发送消息
		Panel1.add("South",Message);

		Send=new JButton("发送");
		Send.addActionListener(this);
		Send.setEnabled(false);//在没有输入服务器IP、、用户名字、按下“连接”前,不可使用
		Panel1.add("South",Send);

		MessageWindow=new JTextArea(50,40);
		MessageWindow.setEditable(false);
		MessageWindow.setFont(new Font("隶书",0,13));
		Pane=new JScrollPane(MessageWindow);
		Pane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
		Pane.setAutoscrolls(true);
		Panel1.add(Pane);

	}


	//***************************************************************
	//动作响应
	//*****************************************************************
	public void actionPerformed(ActionEvent e)
	{
		if(!SIP.getText().equals("")&&!CName.getText().equals("")&&e.getSource().equals(Connect))
		{//如果已经输入服务器IP,用户名字,并按下“连接”
			ServerIp=SIP.getText();//.toString();
			ClientName=CName.getText();
			Login();
			CName.setEditable(false);
			Connect.setEnabled(false);
			Send.setEnabled(true);
			Share.setEnabled(true);
			//JOptionPane.showMessageDialog(null,"友情提示:请输入服务器IP以及用户名","消息对话框",JOptionPane.WARNING_MESSAGE);
		}
		else
			if((SIP.getText().equals("")||CName.getText().equals(""))&&e.getSource().equals(Connect))
			{
				JOptionPane.showMessageDialog(null,"友情提示:请输入服务器IP以及用户名","消息对话框",JOptionPane.WARNING_MESSAGE);
			}
		if(!Message.getText().equals("")&&e.getSource().equals(Send))
		{//如果写好消息,并按下“发送”
			Mout.println("["+ClientName+"]"+Message.getText());
			Mout.flush();
			Message.setText("");
			Message.setFocusable(true);//发送完消息后,将光标指定在Message里面
		}
		else
			if(Message.getText().equals("")&&e.getSource().equals(Send))
			{
				JOptionPane.showMessageDialog(null,"提示:请输入聊天内容","消息对话框",JOptionPane.WARNING_MESSAGE);
			}
	}



	//****************************************************************
	//成功登陆后所执行的行为
	//****************************************************************
	public void Login()
	{
		try
		{
			Client=new Socket(ServerIp,ServerPort);
			Mout=new PrintWriter(Client.getOutputStream());
			Min=new BufferedReader(new InputStreamReader(Client.getInputStream()));
			Mout.println("欢迎["+ClientName+"]进入聊天室");
			Mout.flush();
			Receiver r=new Receiver();
			r.start();
		}
		catch(Exception e)
		{
			e.printStackTrace();
		}
	}

	//*******************************************************************
	//接收消息
	//******************************************************************
	class Receiver extends Thread
	{
		public void run()
		{
			String msg=null;
			JScrollBar sb;
			try
			{
				msg=Min.readLine();
				while(true)
				{
					MessageWindow.append(msg+"\n");
					sb=Pane.getVerticalScrollBar();
					sb.setValue(sb.getMaximum()+50);
					Message.setEnabled(true);
					msg=Min.readLine();
				}
			}
			catch(Exception e)
			{
				Send.setEnabled(false);
			}
		}
	}

	//**********************************************************
	//窗口事件响应
	//**********************************************************
	protected void processWindowEvent(WindowEvent e)
	{
		if(e.getID()==WindowEvent.WINDOW_CLOSING)
		{
			quit();
		}
		super.processWindowEvent(e);
	}

	//**************************************************************
	//quit()的方法
	//*************************************************************
	void quit()
	{
		try
		{
			Mout.println("["+ClientName+"]悄然离开了聊天室");
			Mout.flush();
			Mout.println("exit");
			Mout.flush();
			System.out.println("与服务器断开连接");
			Min.close();
			Mout.close();
			Client.close();
		}
		catch(Exception e){}
		finally
		{
			System.exit(0);
		};
	}

	//***************************************************************
	//Message的键盘动作响应
	//***************************************************************
	class koLis extends KeyAdapter
	{
		public void keyTyped(KeyEvent e)
		{
			if(e.getKeyChar()=='\n')
			{
				if(Message.getText().equals(""))
				{
					JOptionPane.showMessageDialog(null,"友情提示:请输入聊天内容","消息提示框",JOptionPane.WARNING_MESSAGE);
				}
				else
				{
					Mout.println("["+ClientName+"]"+Message.getText());
					Mout.flush();
					Message.setText("");
					Message.setFocusable(true);//发送完消息后,将光标指定在Message里面
				}
			}
		}
	}

	//*************************************************************
	//main函数
	//**************************************************************
	public static void main(String[] args)
	{
		new Ext7_Client();
	}

}

⌨️ 快捷键说明

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