package clientsys;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.text.DateFormat;
import java.text.Format;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.swing.*;
@SuppressWarnings("serial")
public class ChatClient extends JFrame implements ActionListener {
JPanel jpNorth,jpEast,jpSourth,jpCenter;
Container contentPanel;
Socket s;
OutputStream os;
DataOutputStream Dos;
InputStream is;
DataInputStream dis;
private JLabel lblUserName,lblServeraddress,lblServerport,lblSend;
private JTextField jtfUserName,jtfServerAddress,jtfServerport;
private JButton jbtin,jbtout,jbtsend,jbtsetFont,jbtsetColor;
private JTextArea jtaUser,jtaSend;
private JScrollPane jspUser,jspSend;
DateFormat df=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date dt=new Date();
String time=df.format(dt);
public ChatClient(){
//label初始化
lblUserName= new JLabel("请输入用户名:");
lblServeraddress= new JLabel("\n 服务器地址:");
lblServerport= new JLabel("\n 服务器端口:");
lblSend=new JLabel("输入聊天信息:");
//JTextField初始化
jtfUserName=new JTextField(10);
jtfServerAddress=new JTextField(10);
jtfServerport=new JTextField(10);
//JButton初始化
jbtin=new JButton("进入聊天室");
jbtout=new JButton("退出聊天室");
jbtsend=new JButton("发送");
jbtsetFont=new JButton("更换字体");
jbtsetColor=new JButton("更换背景颜色");
//JTextArea初始化
jtaUser=new JTextArea(10,20);
jtaSend=new JTextArea(10,20);
//JScrollPane初始化
jspUser=new JScrollPane(jspUser);
jspSend=new JScrollPane(jspSend);
//界面初始化
jpNorth=new JPanel(new FlowLayout());
jpNorth.add(lblUserName);
jpNorth.add(jtfUserName);
jpNorth.add(jbtin);
jpNorth.add(jbtout);
jpEast=new JPanel(new GridLayout(4,1));
jpEast.add(lblServeraddress);
jpEast.add(jtfServerAddress);
jpEast.add(lblServerport);
jpEast.add(jtfServerport);
jpCenter=new JPanel(new BorderLayout());
jpCenter.add(jtaUser, BorderLayout.CENTER);
JPanel jpCSourth=new JPanel();
jpCSourth.add(jbtsetFont);
jpCSourth.add(jbtsetColor);
jpCenter.add(jpCSourth,BorderLayout.SOUTH);
jpSourth=new JPanel(new FlowLayout());
jtaSend.setRows(1);
jtaSend.setColumns(25);
jpSourth.add(lblSend);
jpSourth.add(jtaSend,BorderLayout.SOUTH);
jpSourth.add(jbtsend,BorderLayout.SOUTH);
contentPanel=this.getContentPane();
contentPanel.setLayout(new BorderLayout());
contentPanel.add(jpNorth,BorderLayout.NORTH);
contentPanel.add(jpCenter,BorderLayout.CENTER);
contentPanel.add(jpEast,BorderLayout.EAST);
contentPanel.add(jpSourth,BorderLayout.SOUTH);
this.setVisible(true);
this.setTitle("聊天室客户端");
this.setSize(450, 450);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jtaUser.setBackground(Color.white);
conncetServer();
//内部类
MyListener ml=new MyListener();
jbtin.addActionListener(ml);
jbtout.addActionListener(ml);
//直接实现类
jbtsend.addActionListener(this);
//匿名类
jbtsetFont.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
Font font=new Font("斜体",Font.HANGING_BASELINE,18);
jtaUser.setFont(font);
}
});
jbtsetColor.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
jtaUser.setBackground(Color.lightGray);
}
});
}
public void conncetServer()
{
try {
s = new Socket("127.0.0.1", 6666);
jtaUser.setText("客户端已启动。"+jtaUser.getText()+" "+time+"\n\n");
os=s.getOutputStream();
Dos=new DataOutputStream(os);
is=s.getInputStream();
dis=new DataInputStream(is);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
jtfServerAddress.setText(s.getLocalAddress().toString());
jtfServerport.setText(s.getPort()+"");
}
class Cf extends Thread
{
public void run() {
String msg;
while(true){
try {
msg = dis.readUTF();
System.out.println("客户端:"+msg);
jtaUser.append(msg);
} catch (IOException e) {
break;
}
}
}
}
public class MyListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
if(e.getSource()==jbtin){
if (jtfUserName.getText().isEmpty()) {
JOptionPane.showMessageDialog(null, "请输入用户名");
}else{
//jtaUser.append(jtfUserName.getText()+"进入聊天室\n");
try {
Dos.writeUTF((jtfUserName.getText()+" 进入聊天室 \n"));
} catch (IOException e1) {
e1.printStackTrace();
}
Cf cf=new Cf();
cf.start();
jtfUserName.setEditable(false);
jbtin.setEnabled(false);
}
}else if(e.getSource()==jbtout){
//jtaUser.append(jtfUserName.getText()+"退出聊天室\n");
try {
Dos.writeUTF(jtfUserName.getText()+"退出聊天室\n");
} catch (IOException e1) {
// TODO 自动生成的 catch 块
e1.printStackTrace();
}
jtfUserName.setEditable(true);
jtfUserName.setText("");
jbtin.setEnabled(true);
}
if (e.getSource()==jbtsend) {
if(jtaSend.getText().isEmpty()){
JOptionPane.showMessageDialog(null, "消息内容不能为空\n");
}else{
jtaUser.append(jtaSend.getText()+"\n");
jtaSend.setEditable(true);
jtaSend.setText(null);
jbtsend.setEnabled(true);
}
}
}
}
public void actionPerformed(ActionEvent e) {
if (e.getSource()==jbtsend) {
if(jtaSend.getText().isEmpty()){
JOptionPane.showMessageDialog(null, "消息内容不能为空\n");
}else{
// jtaUser.append(jtfUserName.getText()+"("+time+")"+":\n"+jtaSend.getText()+"\n");
try {
Dos.writeUTF(jtfUserName.getText()+"("+time+")"+":\n"+jtaSend.getText()+"\n");
} catch (IOException e1) {
// TODO 自动生成的 catch 块
e1.printStackTrace();
}
jtaSend.setText(null);
}
}
}
public static void main(String[] args) {
new ChatClient();
}
}
package clientsys;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import javax.swing.*;
@SuppressWarnings("serial")
public class ChatServer extends JFrame implements ActionListener{
Container contentpanel;
JPanel jPanelNorth,jPanelSouth;
private JButton jbtStart,jbtEnd,jbtSend,jbtClear,jbtRecord;
public static JTextArea jtaServer;
private JScrollPane jspServer;
private JTextField jtfSend;
DateFormat df=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date dt=new Date();
String time=df.format(dt);
ServerSocket ss;
Socket s;
InputStream is;
DataInputStream dis;
String msg;
public static ArrayList<String> massages=null;
public static ArrayList<ClientThread> clientThreads=null;
public ChatServer(){
massages=new ArrayList<String>();
clientThreads=new ArrayList<ClientThread>();
jbtStart=new JButton("开始运行服务器");
jbtEnd=new JButton("结束服务器运行");
jbtSend=new JButton("发送");
jbtClear=new JButton("清屏");
jtaServer=new JTextArea(25,30);
jtaServer.setEditable(false);
jspServer=new JScrollPane(jtaServer
jishitongxun.rar_4 3 2 1_登录报告_需求分析报告
版权申诉
43 浏览量
2022-09-24
20:40:21
上传
评论
收藏 5KB RAR 举报
weixin_42653672
- 粉丝: 94
- 资源: 1万+
最新资源
- 目标检测-手机屏幕表面缺陷检测数据集-1200张图-+对应VOC-COCO-YOLO三种格式标签+数据集划分脚本
- 「天若有情 」深情版--天下万般兵刃 唯有过往伤人最深.mp3
- 123456daWDdwD
- 用友U810.1数据库字典-只需要1积分
- 基于opencv和numpy的customtkinter图像处理工具
- 最新1.8JDK的PostgreSQL JDBC 驱动包
- stlink驱动+J-Link驱动+ST-LINK utility工具
- 项目实战-Python基于KMeans算法进行文本聚类项目实战.zip
- 弹幕视频网站 java源代码毕业设计毕业论文
- 多用户博客个人网站java源代码毕业设计毕业论文
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈