Java聊天室目录1本文简介2聊天室截图与说明2.1用Java编译:2.2服务器登录界面2.3服务器窗口2.4客服端登录界面2.5客服端窗口3服务器端3.1MyServer(方法3.2Login(方法3.3Time(方法4客户端4.1MyClient(方法4.2Login(方法4.3Time(方法1本文简介这是一个简单的Java聊天室,仅提供给一些刚学Java的学生做实验,本文也是仅供参考.本文代码都有注释,希望读者能读懂代码,本实验内部还有一些错误,比如只能一条一条的发信息,不能连发,希望能解决本问题的朋友能给我发信息,我的QQ号就是百度号!2聊天室截图与说明2.1用Java编译:本代码有七个类,放在六个java文件中,类名在下方希望读者自己观看,2.2服务器登录界面要先运行服务器端的程序用户名:y密码:1用户名密码可以自己设定点击确定可以登录,2秒后到服务端界面2.3服务器窗口聊天室的IP为本机的网络虚拟IP,在任何电脑上都能用,端口应设置在1024以后,2.4客服端登录界面和服务器端的登录一样2.5客服端窗口当登录上后客服端就显示已经连接了,此时服务器端的窗口如下由于本程序设计的不是很完整,具体的聊天要先从客服端开始:在客服端输入一条聊天内容后按确定,在服务器端就可以收到信息,之后客户端不能输入了,要等待服务器端来信息后才能继续输入信息.想要结束聊天,直接可以关闭窗口,也可以输入’bye’后断开聊天有兴趣的朋友可以继续完善本实验程序.3服务器端3.1MyServer(方法//服务器端代码importjava.awt.*;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;importjava.io.BufferedReader;importjava.io.InputStreamReader;importjava.io.PrintWriter;importjava.net.ServerSocket;importjava.net.Socket;importjava.text.DateFormat;importjava.util.Date;importjavax.swing.*;publicclassMyServer{//窗体实现类protectedJLabellab10;//全体变量,做传递的一个组件Strings=已经成功连接;//初始字符串,在两个聊天窗口链接成功时输出,同时作为两个窗口传递字符的一个变量//构造方法publicMyServer({try{//异常处理tryJFrameframe=newJFrame(服务器窗口;//设置窗体frame.setLayout(null;//让布局管理器为空,使用绝对定位Fontfnt=newFont(Serief,Font.PLAIN,40;//字体设置Fontfnt1=newFont(Serief,Font.PLAIN,20;//字体设置//我的用户名显示JLabellab1=newJLabel(服务器名:,JLabel.LEFT;//标签实例化,文本左对齐lab1.setBounds(8,10,100,20;//设置组件位置及大小frame.add(lab1;//添加组件JTextFieldtext2=newJTextField(30;//单行文本输入组件text2.setBounds(150,10,200,20;//设置组件位置及大小text2.setEnabled(false;//文本条不可编辑text2.setText(笑笑聊天室;//输入内容text2.setFont(fnt1;//设置字体frame.add(text2;//添加组件//服务器IP显示JLabellab2=newJLabel(当前服务器IP:,JLabel.LEFT;//标签实例化,文本左对齐lab2.setBounds(8,45,100,20;//设置组件位置及大小frame.add(lab2;//添加组件JTextFieldtext3=newJTextField(30;//单行文本输入组件text3.setBounds(150,45,200,20;//设置组件位置及大小text3.setEnabled(false;//文本不可编辑text3.setText(127.0.0.1;//输入内容text3.setFont(fnt1;//设置字体frame.add(text3;//添加组件//服务器端口显示JLabellab3=newJLabel(当前服务器端口:,JLabel.LEFT;//标签实例化,文本左对齐lab3.setBounds(8,80,100,20;//设置组件位置及大小frame.add(lab3;//添加组件JTextFieldtext4=newJTextField(30;//单行文本输入组件text4.setBounds(150,80,200,20;//设置组件位置及大小text4.setEnabled(false;//文本不可编辑text4.setText(8888;//输入内容text4.setFont(fnt1;//设置字体frame.add(text4;//添加组件//聊天记录显示JLabellab4=newJLabel(聊天记录如下:,JLabel.LEFT;//标签实例化,文本左对齐lab4.setBounds(8,115,100,20;//设置组件位置及大小frame.add(lab4;//添加组件finalJTextAreatext1=newJTextArea(;//多行文本输入组件text1.setEnabled(false;//文本不可编辑text1.setLineWrap(true;//自动换行JScrollPanescr=newJScrollPane(text1,JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS;//设置滚动条,水平和垂直滚动条始终显示scr.setBounds(8,150,450,350;//设置组件位置及大小frame.add(scr;//添加组件//聊天输入窗口及确定JLabellab5=newJLabel(请输入聊天内容:,JLabel.LEFT;//标签实例化,文本左对齐lab5.setBounds(8,500,100,20;//设置组件位置及大小frame.add(lab5;//添加组件finalJTextAreatext5=newJTextArea(;//多行文本输入组件text5.setLineWrap(true;//自动换行JScrollPanescr2=newJScrollPane(text5,JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS;//设置滚动条,水平和垂直滚动条始终显示scr2.setBounds(150,500,300,50;//设置组件位置及大小frame.add(scr2;//添加组件finalJButtonbut=newJButton(确定;//设置确定按钮but.setFont(fnt;//添加字体设置but.setBounds(480,500,200,50;//设置组件位置及大小but.addActionListener(newActionListener({//采用内部匿名类publicvoidactionPerformed(ActionEvente{if(e.getSource(==but{//判断触发器源是否是提交按钮text1.append(笑笑:+lab10.getText(+\n;//在聊天记录上添加文本text1.append(text5.getText(+\n;//将输入的聊天内容输出在聊天记录上s=text5.getText(;//得到聊天内容text5.setText(;//将聊天窗口内容设置为空}}};frame.add(but;//添加组件//当前时间显示JLabellab7=newJLabel(时间显示:,JLabel.LEFT;//标签实例化,文本左对齐lab7.setBounds(450,20,100,20;//设置组件位置及大小frame.add(lab7;//添加组件DateFormatdf=DateFormat.getDateTimeInstance(;//取得系统时间Stringdf2=df.format(newDate(;//将时间转换成字符串JLabellab8=newJLabel(df2,JLabel.LEFT;//标签实例化,文本左对齐lab8.setBounds(520,20,130,20;//设置组件位置及大小frame.add(lab8;//添加组件lab10=lab8;//传递时间显示,以便能在聊天记录上显示记录时间newTime(lab8;//使时间动态显示//用户列表显示JLabellab6=newJLabel(用户列表:,JLabel.LEFT;//标签实例化,文本左对齐lab6.setBounds(500,40,100,20;//设置组件位置及大小frame.add(lab6;//添加组件JTextAreatext6=newJTextArea(;//标签实例化,文本左对齐text6.setEnabled(false;//文本不可编辑text6.setLineWrap(true;//自动换行JScrollPanescr3=newJScrollPane(text6,JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS;//设置滚动条,水平和垂直滚动条始终显示scr3.setBounds(460,70,220,420;//设置组件位置及大小frame.add(scr3;//添加组件//窗口的属性frame.setSize(700,600;//窗口大小frame.getContentPane(.setBackground(Color.pink;//窗口的背景颜色frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE;//关闭窗口时关闭程序frame.setLocation(100,50;//在电脑桌面上出现的位置frame.setVisible(true;//显示窗口//连个窗口连接//建立ServerSocket并等待连接请求ServerSocketserver=newServerSocket(8889;Socketsocket=server.accept(;//连接建立,通过Socket获取连接上的输入/输出流BufferedReaderin=newBufferedReader(newInputStreamReader(socket.getInputStream(;finalPrintWriterout=newPrintWriter(socket.getOutputStream(;//先读取Client发送的数据,然后从标准输入读取数据发送给Client当接收到bye时关闭连接Strings1=,s2=;//标志字符串,作为传递字符串使用while(!(s1=in.readLine(.equals(bye{//得到其他窗口传递的字符串,并判断是否结束text6.setText(可可在线;//当连接成功是在用户列表中输出用户名字if(!s1.equals({//如果传递的字符串不为空text1.append(可可:+lab10.getText(+\n;//在聊天记录上添加文本text1.append(s1+\n;//将输入的聊天内容输出在聊天记录上}s2=s;//将在聊天窗口中得到