问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

JAVA 聊天室服务器端和客户端完整代码

发布网友 发布时间:2022-04-28 21:30

我来回答

1个回答

热心网友 时间:2022-04-20 02:18

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.net.*;
import java.util.*;
import java.io.*;

public class Server extends JFrame
{
JMenuBar mb = new JMenuBar();
JMenu m1 = new JMenu("文件");
JMenu m2 = new JMenu("帮助");
JMenuItem mi1 = new JMenuItem("连接");
JMenuItem mi2 = new JMenuItem("退出");
JLabel lab1 = new JLabel("用户在线列表");
JLabel lab2 = new JLabel("消息:");
JTextArea ta = new JTextArea(9,30);
java.awt.List list = new java.awt.List(9);
JTextField tf = new JTextField(24);
JButton b = new JButton("发送");
JScrollPane sp = new JScrollPane();
JPanel p1 = new JPanel();
JPanel p2 = new JPanel();
JPanel p3 = new JPanel();

ServerSocket serverSocket;
Socket socket;
ArrayList array = new ArrayList();
int connect;

public Server()
{
super("聊天服务器");
setJMenuBar(mb);
mb.add(m1);
mb.add(m2);
m1.add(mi1);
m1.addSeparator();
m1.add(mi2);
sp.getViewport().add(ta);
p1.setLayout(new BorderLayout());
p3.add(lab1);
p1.add(p3,BorderLayout.NORTH);
p1.add(list,BorderLayout.SOUTH);
p2.add(lab2);
p2.add(tf);
p2.add(b);
getContentPane().add(sp,BorderLayout.NORTH);
getContentPane().add(p1,BorderLayout.CENTER);
getContentPane().add(p2,BorderLayout.SOUTH);
pack();
//服务器端界面居中显示
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
Dimension frameSize = this.getSize();
if(frameSize.width > screenSize.width)
{
frameSize.width = screenSize.width;
}
if(frameSize.height > screenSize.height)
{
frameSize.height = screenSize.height;
}
setLocation((screenSize.width - frameSize.width)/2,
(screenSize.height - frameSize.height)/2);
setSize(400,430);
setVisible(true);
setResizable(false);

mi1.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
if(serverSocket == null)
{
try
{
serverSocket = new ServerSocket(7000);
ta.append("系统提示:"+" 聊天服务器"
+" 正在启动......\n");
}
catch(IOException ex)
{
ta.append("系统提示:"+" 聊天服务器"
+" 启动失败!\n");
}
}
else
{
ta.append("系统消息:"+" 聊天服务器"
+" 已经启动......\n");
}
//启动监听客户端连接线程
Thread t = new Watch();
t.start();
}
});
mi2.addActionListener(new ServerListener());
b.addActionListener(new ServerListener());
addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
closeAll();
System.exit(0);
}
});
}

class Watch extends Thread
{
public void run()
{
while(true)
{
if(array.size() <= 10)
{
try
{
socket = serverSocket.accept();
}
catch(IOException ex)
{
ta.append("系统消息: "+ex+"\n");
}
//创建客户端线程,一个线程对应一个客户端
Client c = new Client(socket);
array.add(c);
c.start();
}
else
{
ta.append("系统消息:"+" 聊天服务器"
+" 已经超过最大连接数,请待会连接!\n");
}
}
}
}

class Client extends Thread
{
String name;
String ip;
String ipAddress;
Socket socket;
BufferedReader br;
PrintStream ps;

public Client(Socket s)
{
try
{
socket = s;
br = new BufferedReader(new InputStreamReader(s.getInputStream()));
ps = new PrintStream(s.getOutputStream());
}
catch (IOException ex)
{
ta.append("系统消息: "+ex+"\n");
}
}

public void run()
{
String info;
try
{
while(true)
{
info = br.readLine();
if(info == null)
break;
StringTokenizer st = new StringTokenizer(info, ":");
String keyword = st.nextToken();

//处理客户端传来的信息
if (keyword.equals("CONNECT"))
{
name = st.nextToken();
ip = st.nextToken();
ipAddress = ip.substring(ip.indexOf("/")+1);
ta.append("系统消息: " + name + "/"
+ ipAddress +" 已经连接\n");
list.add(name + " " + ip
+" 已经登录");
notifyChatRoom();
}
else if (keyword.equals("MSG"))
{
String broadcast = st.nextToken();
StringBuffer message = new StringBuffer("MSG:" +broadcast);
message.append(st.nextToken("\0"));
if (broadcast.equals("BROAD"))
{
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
在筋骨堂治疗腰椎间盘突出一个疗程后已有好转,隔了三、四天又疼上了... 美的3⃣️匹柜机空调为什么不制热是什么原因? 小票打印机不出字的原因及解决方法如何解决小票打印机无法打印字的问题... 电脑打单打印机出不了小票超市收银台电脑键盘怎么用 交易房屋如何分类 城市规划用途分类该怎么做 规划用途的分类 ...打火机散件设备公司 值得信赖么 ?是不是《骗子》皮包公司? 希望给予... 哈尔滨农垦太阳神打火机散件厂是否骗人 有没有人知道网上那些打火机加工的广告是不是真是可靠?做打火机反销... Java网络聊天室实训能力测试 用java做一个聊天室系统需要用到哪些知识呢 速求用JAVA语言写聊天室的源代码。 提示:使用Swing图形用户界面、多线程、网络编程等技术。 java 网络编程中 tcp连接问题。 例如编写聊天室 , c&#47;s结构的c和s端都是不间断实现请求--响应 。 用java编写多人聊天室程序,不需要太复杂求大神发给我,最好能运行,有源代码。谢谢了 《〈新所得税〉》的实施对香港公司的影响有那些呀??? 我司是外资企业,现在汇2008年前的分红给香港公司,需要交企业所得税吗? 香港投资者投资者私募基金后取得的收益需要缴税吗?可以避税吗? 请教各位专家,香港公司向国内公司分红的税率问题 向境外(香港母公司)分配08年的税后利润,要缴纳10%的企业所得税吗? 香港注册公司向开曼的股东公司分红要不要缴税? 港澳台合资个业股东分红如何个人所得税 外商独资企业分红税收问题 境内个人取得香港公司红利分配是否需扣缴个人所得税!? 香港的股东分红是否缴税,缴什么税?一年可分几次分红,为什么? 香港离岸公司分红股东用交个人所得税吗 香港公司向股东分红后股东将钱汇入国内个账户上税吗? 香港人在开曼群岛注册公司,公司利润税率多少?香港股东分红税率多少?_百度问一问 作为一间香港公司的股东,分红所得的利润是否要打税呢?离岸帐户 603286是什么中期股票 关于合资企业的股东分红的税收问题? 向股东支付红利时,个人所得税计算方法 毕业设计要求做个小型网络聊天室,据说要用java编写程序,可是我没学过这门语言对Java一窍不通。请高手帮 如何用java做一个聊天小程序 要求使用图形用户界面,可以实现一个聊天室... 换了以前的微信好友怎么找回来? 换了以前的微信好友怎么找回来? 用java创建一个简单的多人聊天室作业 求助!!联想M7400打印机卡纸 M7400复印机始终显示后盖打开卡纸,怎么处理 求糗事百科恩验证码一枚、 m7400打印机显示纸盒没纸,实际上有纸,只是吸不起来,请问怎么解决 求个糗事百科的邀请码。谢谢。1027893109@qq.com 网上在哪里下载装机系统? 糗事百科邀请码,求马,要成为有码人士,谢谢啦 求糗事百科邀请码~邮箱:hikaru0502@foxmail.com 糗事百科成年人版怎么电脑上不去了 帮我把“糗事百科”水印去掉 糗事百科 xe nc 什么意思? 看鸡卦的步骤图解 鸡卦五青卦解说示意图