最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 正文

Java程序设计聊天室

来源:动视网 责编:小OO 时间:2025-10-04 08:03:27
文档

Java程序设计聊天室

//聊天室客户端importjava.awt.event.*;importjavax.swing.*;importjava.io.*;importjava.net.*;importjava.awt.*;classClientextendsJFrame{PrintStreamout;//输出流BufferedReaderin;//输入流Stringname;TextAreaarea=newTextArea();TextAreamsgA=newTextArea();TextFieldfrdName
推荐度:
导读//聊天室客户端importjava.awt.event.*;importjavax.swing.*;importjava.io.*;importjava.net.*;importjava.awt.*;classClientextendsJFrame{PrintStreamout;//输出流BufferedReaderin;//输入流Stringname;TextAreaarea=newTextArea();TextAreamsgA=newTextArea();TextFieldfrdName
//聊天室客户端

import java.awt.event.*;

import javax.swing.*;

import java.io.*;

import java.net.*;

import java.awt.*;

class Client extends JFrame

{

PrintStream out; //输出流

BufferedReader in; //输入流

String name;

TextArea area = new TextArea();

TextArea msgA = new TextArea();

TextField frdNameT = new TextField(10);

List list =new List();

Panel p10=new Panel();

JButton sendButton = new JButton("发送");

JButton closeButton = new JButton("关闭");

JButton privateChatButton = new JButton("私聊");

JButton jb1 = new JButton("设置背景颜色");

JButton jb2 = new JButton("设置字体颜色");

JButton jb3 = new JButton("更改头像");

JButton jb4 = new JButton("添加表情");

JButton jb5 = new JButton(new ImageIcon("粗体.JPG"));

JButton jb6 = new JButton(new ImageIcon("斜体.JPG"));

Label lb1 = new Label("昵称:");

ImageIcon picture = new ImageIcon();

JLabel label = new JLabel(picture,SwingConstants.CENTER);

ImageIcon picture1 = new ImageIcon("1.JPG");

ImageIcon picture2 = new ImageIcon("2.JPG");

ImageIcon picture3 = new ImageIcon("3.JPG");

ImageIcon picture4 = new ImageIcon("4.JPG");

//ImageIcon picture5 = new ImageIcon("5.JPG");

//ImageIcon picture6 = new ImageIcon("6.JPG");

//ImageIcon picture7 = new ImageIcon("7.JPG");

ImageIcon picture8 = new ImageIcon("8.JPG");

//ImageIcon picture9 = new ImageIcon("9.JPG");

void init(){

this.pack();

/////设置几个面板////////

Panel p1=new Panel();

Panel p2=new Panel();

Panel p3=new Panel();

Panel p4=new Panel();

Panel p5=new Panel();

Panel p6=new Panel();

Panel p7=new Panel();

Panel p8=new Panel();

Panel p9=new Panel();

lb1.setBackground(Color.pink);

////////设置两个主要的文本框////////////

BorderLayout border1=new BorderLayout();

p1.setLayout(border1);

p1.add(BorderLayout.CENTER,area);

area.setEditable(false);

FlowLayout f2=new FlowLayout(FlowLayout.LEFT);

p3.setLayout(f2);

p3.add(jb1);

p3.add(jb2);

p3.add(jb3);

p3.add(jb4);

p3.add(jb5);

p3.add(jb6);

BorderLayout border2=new BorderLayout();

p5.setLayout(border2);

p5.add(BorderLayout.NORTH,p3);

p5.add(BorderLayout.CENTER,msgA);

p5.setBackground(Color.pink);

BorderLayout border3=new BorderLayout();

p7.setLayout(border3);

p7.add(BorderLayout.CENTER,p1);

p7.add(BorderLayout.SOUTH,p5);

FlowLayout fl=new FlowLayout(FlowLayout.RIGHT);

p8.setLayout(fl);

p8.add(new JLabel("friendName"));

p8.add(frdNameT);

p8.add(privateChatButton);

p8.add(sendButton);

p8.add(closeButton);

p8.setBackground(Color.pink);

BorderLayout border4=new BorderLayout();

p9.setLayout(border4);

p9.add(BorderLayout.CENTER,p7);

p9.add(BorderLayout.SOUTH,p8);

//窗口关闭

this.addWindowListener(new WindowAdapter(){

public void windowClosing(WindowEvent arg0) {

System.exit(0);

}

});

BorderLayout border5=new

BorderLayout();

p10.setLayout(border5);

p10.add(BorderLayout.CENTER,list);

p10.add(BorderLayout.NORTH,label);

p10.setBackground(Color.pink);

//添加背景颜色的

jb1.addActionListener(new ActionListener(){

public void actionPerformed(ActionEvent e){

JColorChooser chooser4=new JColorChooser();

Color color=chooser4.showDialog(Client.this,"我的调色盘

文本域

out.println(msg);

}

}

});

closeButton.addActionListener(new ActionListener(){//"关闭"按钮

public void actionPerformed(ActionEvent e){

System.exit(100);

}

});

jb5.addActionListener(new ActionListener(){//"粗体"按钮

public void actionPerformed(ActionEvent e){

msgA.setFont(new Font("BOLD

////////////////////////////////////////

////////设置两个主要的文本框////////////

Label lb1 = new Label("灵智灵意小组制作");

lb1.setBackground(new Color(200,200,250));

Label lb2 = new Label("port");

BorderLayout border1 = new BorderLayout();

p1.setLayout(border1);

p1.add(BorderLayout.CENTER, area);

BorderLayout border2 = new BorderLayout();

p5.setLayout(border2);

p5.add(BorderLayout.NORTH, p3);

p5.add(BorderLayout.CENTER, msgA);

BorderLayout border3 = new BorderLayout();

p7.setLayout(border3);

p7.add(BorderLayout.CENTER, p1);

p7.add(BorderLayout.SOUTH, p5);

p7.setBackground(new Color(250,150,200));

JButton startButton = new JButton("启动服务");

JButton sendButton = new JButton("发送");

JButton flushButton = new JButton("刷新列表");

FlowLayout fl = new FlowLayout(FlowLayout.LEFT);

p8.setLayout(fl);

p8.add(lb2);

p8.add(portT);

p8.add(startButton);

p8.add(sendButton);

p8.add(flushButton);

p8.setBackground(new Color(250,200,200));

BorderLayout border4 = new BorderLayout();

p9.setLayout(border4);

p9.add(BorderLayout.CENTER, p7);

p9.add(BorderLayout.SOUTH, p8);

p10.setLayout(new BorderLayout());

Label lb3 = new Label("在线用户");

lb3.setBackground(new Color(200,200,250));

p10.add(lb3,BorderLayout.NORTH);

p10.add(list,BorderLayout.CENTER);

area.setEditable(false);

BorderLayout border = new BorderLayout();

this.addWindowListener(new WindowAdapter(){

public void windowClosing(WindowEvent arg0) {

System.exit(0);

}

});

this.setLayout(border);

this.add(BorderLayout.NORTH, lb1);

this.add(BorderLayout.CENTER, p9);

this.add(BorderLayout.EAST, p10);

this.setTitle("聊天服务器 2009");

this.setBounds(100, 100, 600, 550);

this.setVisible(true);

//"启动服务"按钮

startButton.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {

Thread t = new Start();

t.start();

}

});//启动按钮----end

//发送按钮

sendButton.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {

String msg = msgA.getText();

if (msg != null && msg != "") {//如果消息不为空

Calendar ca = new GregorianCalendar();

int hh = ca.get(Calendar.HOUR_OF_DAY);

int mm = ca.get(Calendar.MINUTE);

int ss = ca.get(Calendar.SECOND);

String time = new String(hh + ":" + mm + ":" + ss + " ");

broadcast(time + "[系统消息]: " + msg);//那么广播这条系统消息

area.append(time + "[系统消息]: " + msg + "\

");

msgA.setText("");

}

}

});//end

//刷新按钮

flushButton.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {

if (list != nu

ll) {

list.removeAll();//清空在线用户列表,以便刷新

}

Set> mySet = container.entrySet();

for (Iterator> it = mySet.iterator(); it.hasNext();) {//刷新列表

Map.Entry me = it.next();

String aClientName = me.getKey();

Socket aClient = me.getValue();

String aClientAddress = aClient.getInetAddress().getHostAddress();

list.add(aClientName + "----" + aClientAddress);

}//end of for

}//end of actionPerformed

});//end

msgA.addKeyListener(new KeyAdapter(){//键盘---按下Enter发送信息

public void keyPressed(KeyEvent e){

int value = e.getKeyCode();

if(value == KeyEvent.VK_ENTER){

String msg = msgA.getText();

Calendar ca = new GregorianCalendar();

int hh = ca.get(Calendar.HOUR_OF_DAY);

int mm = ca.get(Calendar.MINUTE);

int ss = ca.get(Calendar.SECOND);

String time = new String(hh + ":" + mm + ":" + ss + " ");

broadcast(time + "[系统消息]: " + msg);//那么广播这条系统消息

area.append(time + "[系统消息]: " + msg + "\

");

msgA.setText("");

}

}

});

}//end of init()

class Start extends Thread //启动服务器的线程

{

public void run() {

try {

if(server != null && !server.isClosed()){

area.append("警告!服务器已在启动中!\

");

}

else{

server = new ServerSocket(Integer.parseInt(portT.getText()));//启动服务器

area.append((new Date()).toString() +'\

'+ "[恭喜!^_^]"+"服务器启动成功!" + "\

\

");

}

while(true){

client = server.accept();

Thread sgS = new SgService(client);//为每位登录的客户创建一个线程

sgS.start();//启动客户线程

}

}

catch (Exception e) {

System.out.println("cuowu 1");

e.printStackTrace();

}

}//end of run()

} //end of Start

//处理单个客户的线程

class SgService extends Thread//SgService---begin

{

private Socket client = null;//客户套接字

private BufferedReader br = null;//输入流

private PrintStream ps = null;

private int counter = 0;//记录是第几次接受用户的信息

private int mark = 0;//记录用户说不文明用语的次数

private String name = null;

SgService(Socket client) {//构造方法

this.client = client;

}

public void run() {//run()----begin

try {

br = new BufferedReader(new InputStreamReader(client.getInputStream()));

ps = new PrintStream(client.getOutputStream());

String msg = null;

while ((msg = br.readLine()) != null) {//无限循环,意味着可以和客户进行无限次交互

if(counter == 0){

name = msg;

container.put(name,client);

list.add(name + "----" + client.getInetAddress().getHostAddress());

Calendar ca = ne

w GregorianCalendar();

int hh = ca.get(Calendar.HOUR_OF_DAY);

int mm = ca.get(Calendar.MINUTE);

int ss = ca.get(Calendar.SECOND);

String time = hh + ":" + mm + ":" + ss + " ";

broadcast(time + name + "上线了!");

area.append(time + name + "上线了!\

\

");

counter ++;

}

else{

if(msg.equals("你是个笨蛋")){

mark = mark + 1;

if(mark < 3){

Calendar ca = new GregorianCalendar();

int hh = ca.get(Calendar.HOUR_OF_DAY);

int mm = ca.get(Calendar.MINUTE);

int ss = ca.get(Calendar.SECOND);

String time = new String(hh + ":" + mm + ":" + ss + " ");

singleCom(time +"[系统消息]: 警告!请注意文明用语!" ,client);

//在服务器端显示这个用户说不文明语言的次数

area.append(time + "[系统消息]: " + name +"第" + mark+ "次使用了不文明用语,特此警告!");

}

else{//如果客户第三次说不文明的话,系统就把他踢出聊天室

Calendar ca = new GregorianCalendar();

int hh = ca.get(Calendar.HOUR_OF_DAY);

int mm = ca.get(Calendar.MINUTE);

int ss = ca.get(Calendar.SECOND);

String time = new String(hh + ":" + mm + ":" + ss + " ");

if(mark == 3){

singleCom(time + "[系统消息]: 由于您多次使用了不文明用语,经警告无效,现已被踢出聊天室!" ,client);//告诉他本人

}

removeClient(name,client);//从系统列表中删除这个人的信息

//并向所有人广播这一消息

broadcast(time + "[系统消息]: " + name + "由于多次使用了不文明用语,经警告无效,现已被踢出聊天室!");

area.append(time + "[系统消息]: " + name + "由于多次使用了不文明用语,经警告无效,现已被踢出聊天室!\

");

}

//broadcast("[系统消息]: " + name + "由于使用了不文明用语,已被踢出聊天室!");

//area.append("[系统消息]: " + name + "由于使用了不文明用语,已被踢出聊天室!\

");

//list.remove(name + "----" + client.getInetAddress().getHostAddress());

//container.remove(name);

}

else{

Calendar ca = new GregorianCalendar();

int hh = ca.get(Calendar.HOUR_OF_DAY);

int mm = ca.get(Calendar.MINUTE);

int ss = ca.get(Calendar.SECOND);

String time = new String(hh + ":" + mm + ":" + ss + " ");

area.append(time + name+"说:"+msg + "\

\

");//将客户发送的消息显示在服务器的窗口中

broadcast(time + name+"说:"+msg+"\

");//同时向每个在线客户广播这则消息

}

}

}//end of while

}

catch (Exception ex) {

Calendar ca = new GregorianCalendar();

int hh = ca.get(Calendar.HOUR_OF_DAY);

int mm = ca.get(Calend

ar.MINUTE);

int ss = ca.get(Calendar.SECOND);

String time = new String(hh + ":" + mm + ":" + ss + " ");

area.append(time + name + "下线了!\

");

broadcast(time + name + "下线了!\

");

list.remove(name + "----" + client.getInetAddress().getHostAddress());

container.remove(name);

}

}//run()---end

}//SgService-----end

void removeClient(String name,Socket client){//踢人

list.remove(name + "----" + client.getInetAddress().getHostAddress());

container.remove(name);

}

//广播

void broadcast(String msg) {//broadcast()-----begin

Set> mySet = container.entrySet();

Iterator> it = mySet.iterator();

String message = msg;

while (it.hasNext()) {//如果列表中还有客户

Map.Entry me = it.next();

Socket tempClient = me.getValue();

singleCom(message, tempClient);//就把消息向发给这个客户

}

}//broadcast()-----end

//向单个客户发送消息

private void singleCom(String msg, Socket aClient) {//singleCommunication------begin

try {

PrintStream pw = new PrintStream(aClient.getOutputStream());

String message = msg;

pw.println(msg);

} catch (Exception ex) {

ex.printStackTrace();

}

}//singleCommunication----end

public static void main(String[] args) {

new Server().init(); //启动服务器窗口

System.out.println("服务器:");

}

}//end of Server

//登录界面:

import javax.swing.*;

import java.awt.*;

import java.awt.event.*;

import java.io.*;

import java.net.*;

class Login extends JFrame implements ActionListener

{

TextField txtPort;

TextField txtIP;

TextField txtName;

JButton btnLogin;

JButton btnCancel;

Socket toServer;

BufferedReader in;

PrintStream out;

public Login(){

Panel p1=new Panel();

Panel p2=new Panel();

Panel p3=new Panel();

Panel p4=new Panel();

Panel p5=new Panel();

Label l1=new Label("port");

Label l2=new Label("IP");

Label l3=new Label("昵称");

txtPort=new TextField("9999

is.setResizable(false);

this.setLocation(450,250);

this.setVisible(true);

this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

}

//实现"登录"和"取消"按钮的

public void actionPerformed(ActionEvent e){

JButton button = (JButton)e.getSource();

if(button.equals(btnCancel)){

dispose();//如果客户按了"取消"按钮,那么登录窗口就关闭

}

else {//如果客户按了"登录

文档

Java程序设计聊天室

//聊天室客户端importjava.awt.event.*;importjavax.swing.*;importjava.io.*;importjava.net.*;importjava.awt.*;classClientextendsJFrame{PrintStreamout;//输出流BufferedReaderin;//输入流Stringname;TextAreaarea=newTextArea();TextAreamsgA=newTextArea();TextFieldfrdName
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top