📄 ext7_client.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 + -