java简易界面聊天程序源代码
聊天窗口界面代码
聊天窗口界面代码import java.awt.*;import java.awt.event.*;import javax.swing.*;import javax.swing.plaf.basic.BasicBorders.RadioButtonBorder;public class Jiecheng extends JApplet implements ActionListener{JButton Jvideo = new JButton("视频");JButton Jsound = new JButton("语音");JComboBox Jfile = new JComboBox();JComboBox Jfunction1 = new JComboBox();JComboBox Jfunction2 = new JComboBox();JButton Jfont = new JButton("字体");JButton Jfeel = new JButton("表情");JButton Jcut = new JButton("截图");JComboBox Jsend = new JComboBox();JComboBox Jinformation = new JComboBox();JButton Jimage = new JButton("图片");JButton Jmusic = new JButton("音乐");JButton Jdistance = new JButton("远程协助");JButton Jclose= new JButton("关闭");JTextArea t1=new JTextArea(15,40);TextArea t2=new TextArea(6,61);String file[]={"发送文件","发送文件夹","发送离线文件","发送文件设置"};String function1[]={"更多功能","发送邮件","手机勉费聊QQ","搜索","电影专区","财付通","网购","游戏"};String information[]={" 显示消息记录","显示比例","清屏","消息管理器"};String send[]={"发送消息","按Enter发送","Ctrl+Enter 发送","消息合并","关闭窗口"};JPanel p1,p2,p3,p4,p5,p6,p7,p8,p9;public void init(){p1=new JPanel();p2=new JPanel();p3=new JPanel();p4=new JPanel();p5=new JPanel();p6=new JPanel();p7=new JPanel();p8=new JPanel();p9=new JPanel();p1.add(Jvideo);p1.add(Jsound);p1.add(Jdistance);for(int k=0;k<file.length;k++)Jfile.addItem(file[k]);p1.add(Jfile);for(int a=0;a<function1.length;a++)Jfunction1.addItem(function1[a]);p1.add(Jfunction1);p2.add(t1);p3.setLayout(new BorderLayout());p3.add(p1, BorderLayout.NORTH);p3.add(p2, BorderLayout.CENTER);add(p3);p4.setLayout(new FlowLayout(FlowLayout.CENTER)); p4.add(Jfont);p4.add(Jfeel);p4.add(Jimage);p4.add(Jmusic);p4.add(Jcut);for(int f=0;f<information.length;f++) Jinformation.addItem(information[f]);p4.add(Jinformation);p5.add(t2);p6.setLayout(new FlowLayout(FlowLayout.RIGHT)); p6.add(Jclose);for(int g=0;g<send.length;g++)Jsend.addItem(send[g]);p6.add(Jsend);p7.setLayout(new BorderLayout());p7.add(p5,BorderLayout.NORTH);p7.add(p6,BorderLayout.CENTER);add(p7);p8.setLayout(new BorderLayout());p8.add(p4,BorderLayout.NORTH);p8.add(p7,BorderLayout.CENTER);p9.setLayout(new BorderLayout());p9.add(p3,BorderLayout.NORTH);p9.add(p8,BorderLayout.CENTER);add(p9);}public void actionPerformed(ActionEvent e){}public static void main(String []args){JFrame f=new JFrame("用户聊天窗口");f.addWindowFocusListener(new WindowAdapter() {public void windowClosing(WindowEvent e){System.exit(0);}});Jiecheng p=new Jiecheng(); p.init();f.add("Center",p);f.setSize(456,546);f.show();f.setResizable(false);}}。
SimpleChat程序(一对多聊天源代码 java)
package com.wyh.chatRoom;import java.awt.BorderLayout;import java.awt.Color;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.PrintWriter;import .InetAddress;import .ServerSocket;import .Socket;import javax.swing.JButton;import javax.swing.JComboBox;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JPanel;import javax.swing.JScrollPane;import javax.swing.JTabbedPane;import javax.swing.JTextArea;import javax.swing.JTextField;import javax.swing.JToolBar;public class wyhChatRoom extends JFrame implements ActionListener{ private String name; //服务器聊天室的图形用户界面private JComboBox combox; //网名private JTextField text; //输入IP地址或域名的组合框private JTabbedPane tab; //选项卡窗格,每页与一个Socket通信public wyhChatRoom(int port ,String name) throws IOException{super("聊天室"+name+" "+InetAddress.getLocalHost()+"端口:"+port);this.setBounds(320, 240, 440, 240);this.setDefaultCloseOperation(EXIT_ON_CLOSE);JToolBar toolbar=new JToolBar(); //工具栏this.getContentPane().add(toolbar,"North");toolbar.add(new JLabel("主机"));combox=new JComboBox();combox.addItem("127.0.0.1");toolbar.add(combox);combox.setEditable(true);toolbar.add(new JLabel("端口"));text=new JTextField("1251");toolbar.add(text);JButton button_connect=new JButton("连接");button_connect.addActionListener(this);toolbar.add(button_connect);tab=new JTabbedPane(); //选项卡窗口this.setBackground(Color.blue);this.getContentPane().add(tab);this.setVisible(true);=name;while(true){Socket client=new ServerSocket(port).accept();//等待接受客户端的连接申请tab.addTab(name, new TabPageJPanel(client));//tab添加页,页中添加内部类面板tab.setSelectedIndex(tab.getTabCount()-1);//tab指定新页为选择状态port++;}}public void actionPerformed(ActionEvent e){if(e.getActionCommand()=="连接"){String host=(String)combox.getSelectedItem();int port=Integer.parseInt(text.getText());try{tab.addTab(name, new TabPageJPanel(new Socket(host,port)));//连接成功tab添加页tab.setSelectedIndex(tab.getTabCount()-1);//tab指定新页为选中状态}catch(IOException e1){e1.printStackTrace();}}}//面板内部类,每个对象表示选项卡窗格的一页,包含一个Socket和一个线程private class TabPageJPanel extends JPanel implements Runnable,ActionListener{Socket socket;Thread thread;JTextArea text_receiver;//显示对话内容的文本区JTextField text_sender; //输入发送内容的文本行JButton buttons[]; //发送‘离线’删除页按钮PrintWriter cout; //字符输出流对象int index;TabPageJPanel(Socket socket) {super(new BorderLayout());this.text_receiver=new JTextArea();this.text_receiver.setEditable(false);this.add(new JScrollPane(this.text_receiver));JPanel panel=new JPanel();this.add(panel,"South");this.text_sender=new JTextField(16);panel.add(this.text_sender);this.text_sender.addActionListener(this);String strs[]={"发送","离线","删除页"};buttons =new JButton[strs.length];for (int i = 0; i < buttons.length; i++) {buttons[i]=new JButton(strs[i]);panel.add(buttons[i]);buttons[i].addActionListener(this);}buttons[2].setEnabled(false);this.socket=socket;this.thread=new Thread(this);this.thread.start();}@Overridepublic void run() {try {this.cout =new PrintWriter(socket.getOutputStream(),true);this.cout.println(name);//发送自己网名给对方BufferedReader cin=new BufferedReader(new InputStreamReader(socket.getInputStream()));String name=cin.readLine(); //接收对方网名index=tab.getSelectedIndex();tab.setTitleAt(index, name);String aline=cin.readLine();while(aline!=null && !aline.equals("bye")){tab.setSelectedIndex(index);text_receiver.append(aline+"\r\n");Thread.sleep(1000);aline=cin.readLine();}cin.close();cout.close();socket.close();buttons[0].setEnabled(false);//接收方的发送按钮无效buttons[1].setEnabled(false);//接收方的离线按钮无效buttons[2].setEnabled(false);//接收方的删除按钮无效} catch (Exception e) {e.printStackTrace();}}@Overridepublic void actionPerformed(ActionEvent e) {if(e.getActionCommand()=="发送"){this.cout.println(name+"说:"+text_sender.getText());text_receiver.append("我说:"+text_sender.getText()+"\n");text_sender.setText("");}if(e.getActionCommand()=="离线"){text_receiver.append("我离线\n");this.cout.println(name+"离线\n"+"bye");buttons[0].setEnabled(false);buttons[1].setEnabled(false);buttons[2].setEnabled(false);}}}public static void main(String[] args) throws IOException {new wyhChatRoom(2001, "航哥哥");//启动服务端,约定端口,指定网名}}。
java聊天室部分主要代码
ChatClient.javaimport java.awt.*;import java.io.*;import .*;import java.applet.*;import java.util.Hashtable;public class ChatClient extends Applet implements Runnable{ Socket socket=null;DataInputStream in=null;//读取服务器端发来的消息DataOutputStream out=null;//向服务器端发送的消息InputInfo 用户名提交界面=null;UserChat 聊天界面=null;Hashtable listTable;//用于存放在线用户的用户名的散列表Label 提示条;Panel north,center;Thread thread;public void init(){setSize(1000,800);int width=getSize().width;int height=getSize().height;listTable=new Hashtable();setLayout(new BorderLayout());用户名提交界面=new InputInfo(listTable);int h=用户名提交界面.getSize().height;聊天界面=new UserChat("",listTable,width,height-(h+5));聊天界面.setVisible(false);提示条=new Label("正在连接到服务器...",Label.CENTER);提示条.setForeground(Color.red);north=new Panel(new FlowLayout(FlowLayout.LEFT));center=new Panel();north.add(用户名提交界面);north.add(提示条);center.add(聊天界面);add(north,BorderLayout.NORTH);add(center,BorderLayout.CENTER);validate();}public void start(){if(socket!=null&&in!=null&&out!=null){try{socket.close();in.close();out.close();聊天界面.setVisible(false);}catch(Exception ee){}}try{socket=new Socket(this.getCodeBase().getHost(),6666);in=new DataInputStream(socket.getInputStream());out=new DataOutputStream(socket.getOutputStream());}catch(IOException ee){提示条.setText("连接失败");}//客户端成功连接服务器端if(socket!=null){InetAddress address=socket.getInetAddress();提示条.setText("连接:"+address+"成功");用户名提交界面.setSocketConnection(socket,in,out);north.validate();}if(thread==null){thread=new Thread(this);thread.start();}}public void stop(){try{socket.close();thread=null;}catch(IOException e){this.showStatus(e.toString());}}public void run(){while(thread!=null){if(用户名提交界面.getchatornot()==true){聊天界面.setVisible(true);聊天界面.setName(用户名提交界面.getName());聊天界面.setSocketConnection(socket,in,out);提示条.setText("祝聊天快乐!");center.validate();break;}try{Thread.sleep(100);}catch(Exception e){}}}}ChatMain.javaimport .*;import java.util.*;public class ChatMain {public static void main(String args[]) {ServerSocket server=null;Socket you=null;Hashtable peopleList;peopleList=new Hashtable();while(true){try{//服务器端在端口6666处监听来自客户端的信息server=new ServerSocket(6666);}catch(IOException e1){System.out.println("正在监听");}try{//当服务器端接收到客户端的消息后,取得客户端的IP地址。
局域网聊天程序客户端代码+详解
import java.io.*;import .*;import java.awt.*;import javax.swing.*;import java.awt.event.*;//引入包。
public class ChatClient {public static void main(String[] args) {ChatClient cc = new ChatClient();cc.receive();}JTextField jtf; // 文本条JTextArea jta; //文本域。
Socket s; //客户端PrintWriter out; //输出流BufferedReader in; //输入流public ChatClient() {JFrame frame = new JFrame("ChatClient");//窗口frame.setSize(400, 300); //大小jta = new JTextArea(); //文本域jta.setEditable(false); //不可编辑jtf = new JTextField();//文件条jtf.addActionListener(new ActionListener() { //添加监听。
public void actionPerformed(ActionEvent arg0) {send(); //调用send()方法}});frame.getContentPane().add(new JScrollPane(jta)); //添加滚动条frame.getContentPane().add(jtf, "South"); //添加文本条frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //关闭窗口。
frame.setVisible(true); //可显示的。
Java课程设计聊天室(含代码)
Java程序课程设计任务书JAVA聊天室的系统的设计与开发1.主要内容:用JAVA实现基于C/S模式的聊天室系统。
聊天室分为服务器端和客户端两部分,服务器端程序主要负责侦听客户端发来的信息,客户端需要登陆到服务器端才可以实现正常的聊天功能。
2.具体要求(包括技术要求等):系统的功能要求:A.服务器端主要功能如下:1.在特定端口上进行侦听,等待客户端连接。
2.用户可以配置服务器端的侦听端口,默认端口为8888。
3.向已经连接到服务器端的用户发送系统消息。
4.统计在线人数。
5.当停止服务时,断开所有的用户连接。
B.客户端的主要功能如下:1.连接到已经开启聊天服务的服务器端。
2.用户可以配置要连接的服务器端的IP地址和端口号。
3.用户可以配置连接后显示的用户名。
4.当服务器端开启的话,用户可以随时登录和注销。
5.用户可以向所有人或某一个人发送消息。
学习并掌握一下技术:Java JavaBean 等熟练使用一下开发工具:Eclipse, JCreator 等实现系统上诉的功能。
3.进度安排:12月28日 ~ 12月29日:课程设计选题,查找参考资料12月30日 ~ 1月1日:完成系统设计1月2日 ~ 1月5日:完成程序代码的编写1月6日:系统测试与完善1月7日:完成课程设计报告,准备答辩4.主要参考文献:[1].张广彬孟红蕊张永宝.Java课程设计(案例精编)[M].清华大学出版社.2007年版摘要在网络越来越发达的今天,人们对网络的依赖越来越多,越来越离不开网络,由此而产生的聊天工具越来越多,例如,国外的ICQ、国内腾讯公司开发的OICQ。
基于Java网络编程的强大功能,本次毕业设计使用Java编写一个聊天系统。
一般来说,聊天工具大多数由客户端程序和服务器程序外加服务器端用于存放客户数据的数据库组成,本系统采用客户机/服务器架构模式通过Java提供的Soket类来连接客户机和服务器并使客户机和服务器之间相互通信,由于聊天是多点对多点的而Java提供的多线程功能用多线程可完成多点对多点的聊天,数据库管理系统用SQL Server2000完成并通过JDBC-ODBC桥访问数据库。
java聊天工具代码
else if(pareTo("close")==0) {
try {
DataInputStream is=new DataInputStream(socket.getInputStream());
if(pareTo("start")==0) {
try {
int po=Integer.parseInt(port.getText());
svsocket=new ServerSocket(po);
daemons=new Daemon[MAXUSER];
close.addActionListener(this);
add(panel2,BorderLayout.SOUTH);
tamsg=new TextArea();
tamsg.setBackground(Color.PINK);
tamsg.append("输入你要链接的地址,然后按(link)按钮\n");
}
catch (Exception exc) {
tamsg.append("error happended link\n");
tamsg.append(exc.toString());
}
}
else if(pareTo("id_ok")==0)
DataOutputStream os=new DataOutputStream(socket.getOutputStream());
os.write(strmsg.getBytes());
简易的聊天软件代码
GetMessage.java服务端:import java.io.BufferedReader;import java.io.FileReader;import java.io.IOException;import java.io.InputStreamReader;public class GetMessage extends Thread{ private int i;String v;JLabel label=null;private JTextArea text;public GetMessage(int i,JTextArea text) {this.i=i;this.text=text;}public void run(){try {ServerSocket so = newServerSocket(i);Socket s = so.accept();while(true){InputStreamReader i = new InputStreamReader(s.getInputStream());BufferedReader b = new BufferedReader(i);v= b.readLine();text.append("对方说"+v+"\n");}} catch (IOException e) {//label.setText("对方已经下线");text.append();}}}SendMessage.java客户端:import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader; import java.io.PrintStream;import .Socket;public class SendMessage extends Thread {private String ip;private int i;Socket s = null;JLabel label=null;JTextField text;JTextArea text1;public SendMessage(String ip,inti,JTextArea text1) {// TODO Auto-generated constructor stubthis.ip=ip;this.i=i;this.text1=text1;}public void run(){while(true){try {s = new Socket(ip,i);text1.setText("连接成功"+"\n");break;} catch (Exception e) {try {Thread.sleep(1000);} catch(InterruptedException e1) {System.out.println("出错了。
droid Socket实现简单聊天小程序
android Socket实现简单聊天小程序服务器端:Java代码手机端:Java代码注意几点:1、添加网络权限Java代码如果没添加,无法使用socket连接网络。
2、在新启线程中不要使用android系统UI界面在EchoThrad的run()方法里面,有下面代码:Java代码这里的handler.sendMessage(message);是发送一个消息给handler,然后handler根据消息弹出一个Toast显示连接失败。
如果这里直接使用Java代码会报如下错:Java代码倚窗远眺,目光目光尽处必有一座山,那影影绰绰的黛绿色的影,是春天的颜色。
周遭流岚升腾,没露出那真实的面孔。
面对那流转的薄雾,我会幻想,那里有一个世外桃源。
在天阶夜色凉如水的夏夜,我会静静地,静静地,等待一场流星雨的来临…许下一个愿望,不乞求去实现,至少,曾经,有那么一刻,我那还未枯萎的,青春的,诗意的心,在我最美的年华里,同星空做了一次灵魂的交流…秋日里,阳光并不刺眼,天空是一碧如洗的蓝,点缀着飘逸的流云。
偶尔,一片飞舞的落叶,会飘到我的窗前。
斑驳的印迹里,携刻着深秋的颜色。
在一个落雪的晨,这纷纷扬扬的雪,飘落着一如千年前的洁白。
窗外,是未被污染的银白色世界。
我会去迎接,这人间的圣洁。
在这流转的岁月里,有着流转的四季,还有一颗流转的心,亘古不变的心。
When you are old and grey and full of sleep, And nodding by the fire, take down this book, And slowly read, and dream of the soft look Your eyes had once, and of their shadows deep; How many loved your moments of glad grace, And loved your beauty with love false or true, But one man loved the pilgrim soul in you,And loved the sorrows of your changing face; And bending down beside the glowing bars, Murmur, a little sadly, how love fledAnd paced upon the mountains overheadAnd hid his face amid a crowd of stars.。
Java 多人聊天 源码
Java 多人聊天源码1.ChatApplet.java类import java.awt.*;import java.awt.event.*;import java.applet.*;import javax.swing.*;import yout.*;import javax.swing.border.*;import java.io.*;import .*;public class ChatApplet extends JApplet {boolean isStandalone = false;BorderLayout borderLayout1 = new BorderLayout();Border border1;JPanel jPanel2 = new JPanel();Border border2;BorderLayout borderLayout2 = new BorderLayout();JPanel jPanel1 = new JPanel();JButton buttonSend = new JButton();BorderLayout borderLayout3 = new BorderLayout();JPanel jPanel3 = new JPanel();Border border3;BorderLayout borderLayout4 = new BorderLayout();JTextField textTalk = new JTextField();JPanel jPanel4 = new JPanel();Border border4;BorderLayout borderLayout5 = new BorderLayout();JScrollPane jScrollPane1 = new JScrollPane();JTextArea textMessages = new JTextArea();PrintWriter out = null;/**Get a parameter value*/public String getParameter(String key, String def) {return isStandalone ? System.getProperty(key, def) :(getParameter(key) != null ? getParameter(key) : def); }/**Construct the applet*/public ChatApplet() {}/**Initialize the applet*/public void init() {try {jbInit();Client client = new Client(this);if (client.isConnected())out = client.getOutputStream();elseappendMessage("大大的错误!!");}catch(Exception e) {e.printStackTrace();}}/**Component initialization*/private void jbInit() throws Exception {border1 = BorderFactory.createEmptyBorder(9,9,9,9);border2 = BorderFactory.createEmptyBorder(9,9,9,9);border3 = BorderFactory.createEmptyBorder(2,0,2,5);border4 = BorderFactory.createEmptyBorder(0,0,5,0);this.setSize(new Dimension(400,300));this.getContentPane().setLayout(borderLayout1);jPanel2.setBorder(border2);jPanel2.setLayout(borderLayout2);buttonSend.setFocusPainted(false);buttonSend.setText("发送");buttonSend.addActionListener(newjava.awt.event.ActionListener() {public void actionPerformed(ActionEvent e) {buttonSend_actionPerformed(e);}});jPanel1.setLayout(borderLayout3);jPanel3.setBorder(border3);jPanel3.setLayout(borderLayout4);jPanel4.setBorder(border4);jPanel4.setLayout(borderLayout5);textTalk.addKeyListener(new java.awt.event.KeyAdapter() { public void keyPressed(KeyEvent e) {textTalk_keyPressed(e);}});this.getContentPane().add(jPanel2, BorderLayout.CENTER);jPanel2.add(jPanel1, BorderLayout.SOUTH);jPanel1.add(buttonSend, BorderLayout.EAST);jPanel1.add(jPanel3, BorderLayout.CENTER);jPanel3.add(textTalk, BorderLayout.CENTER);jPanel2.add(jPanel4, BorderLayout.CENTER);jPanel4.add(jScrollPane1, BorderLayout.CENTER);jScrollPane1.getViewport().add(textMessages, null);}/**Get Applet information*/public String getAppletInfo() {return "Applet Information";}/**Get parameter info*/public String[][] getParameterInfo() {return null;}/**Main method*/public static void main(String[] args) {ChatApplet applet = new ChatApplet();applet.isStandalone = true;JFrame frame = new JFrame();//EXIT_ON_CLOSE == 3frame.setDefaultCloseOperation(3);frame.setTitle("Applet Frame");frame.getContentPane().add(applet, BorderLayout.CENTER);applet.init();applet.start();frame.setSize(400,320);Dimension d = Toolkit.getDefaultToolkit().getScreenSize();frame.setLocation((d.width - frame.getSize().width) / 2, (d.height - frame.getSize().height) / 2);frame.setVisible(true);}//static initializer for setting look & feelstatic {try {UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());//UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClass Name());}catch(Exception e) {}}public void appendMessage(String message) {textMessages.setText(message + textMessages.getText());}void buttonSend_actionPerformed(ActionEvent e) {String msg;msg = textTalk.getText().trim();if (msg.equals("") || msg == null) return;out.println(textTalk.getText());textTalk.setText("");}void textTalk_keyPressed(KeyEvent e) {if (e.getKeyChar() != '\n') return;out.println(textTalk.getText());textTalk.setText("");}}2.ChatServlet.javaimport javax.servlet.*;import javax.servlet.http.*;import java.io.*;import java.util.*;public class ChatServlet extends HttpServlet {private static final String CONTENT_TYPE = "text/html";/**Initialize global variables*/public void init(ServletConfig config) throws ServletException { super.init(config);try {new Server();}catch (IOException ex) {System.err.println("IO 错误:");ex.printStackTrace(System.err);destroy();}/**Process the HTTP Get request*/public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {response.setContentType(CONTENT_TYPE);PrintWriter out = response.getWriter();out.println("<html>");out.println("<head><title>ChatServlet</title></head>");out.println("<body>");out.println("<p>The servlet has received a GET. This is the reply.</p>");out.println("</body></html>");}/**Clean up resources*/public void destroy() {}}3.Client.javaimport java.io.*;import .*;public class Client {Socket socket = null;private String host;private boolean connected = false;public boolean isConnected() { return connected; }public Client(ChatApplet applet) {try {host = applet.getDocumentBase().getHost();//host = "202.115.4.246";socket = new Socket(host, Server.port);connected = true;new ClientRecieveThread(socket, applet).start();}catch (Exception ex) {applet.appendMessage(ex.getMessage());ex.printStackTrace(System.err);}public PrintWriter getOutputStream() throws IOException {return new PrintWriter(socket.getOutputStream(), true);}}4.ClientRecieveThread.javaimport java.io.*;import .*;public class ClientRecieveThread extends Thread {private ChatApplet applet = null;private Socket socket = null;public ClientRecieveThread(Socket socket, ChatApplet applet) { this.socket = socket;this.applet = applet;}public void run() {BufferedReader in = null;String inputLine;try {in = new BufferedReader(new InputStreamReader(socket.getInputStream()));while ((inputLine = in.readLine()) != null) {//if (inputLine.equalsIgnoreCase("quit")) break; applet.appendMessage(inputLine + "\n");}}catch (Exception ex) {ex.printStackTrace(System.err);}finally {Close();}}void Close() {try {socket.close();catch (Exception ex) {ex.printStackTrace(System.err);}}}5.Protocol.javapublic class Protocol {private String userid;public Protocol(String userid) {erid = userid;}public String processInput(String input) {return (userid + ": " + input);}}6.Server.javaimport java.io.*;import .*;import java.util.Vector;public class Server {private ServerSocket serverSocket = null;public static int port = 4444;private boolean listening = true;Vector clientSockets = new Vector(10);public Server() throws IOException {try {serverSocket = new ServerSocket(port);}catch (Exception ex) {System.err.println("不能监听端口:" + port); ex.printStackTrace(System.err);System.exit(-1);System.out.println("成功监听端口:" + port);while (listening)addClient(serverSocket.accept());serverSocket.close();}public void addClient(Socket socket) throws IOException {new ServerThread(socket, this).start();clientSockets.add(socket);send("欢迎 " + socket.getInetAddress().getHostName() + " 来到这里!");System.out.println("聊天室共有 " + clientSockets.size() + " 人");}public void removeClient(Socket socket) throws IOException {send("欢送 " + socket.getInetAddress().getHostName() + " 的离去");clientSockets.remove(socket);System.out.println("聊天室共有 " + clientSockets.size() + " 人");}public void send(String msg) throws IOException {Socket socket = null;for (int I = 0; I < clientSockets.size(); I++) {socket = (Socket)(clientSockets.get(I));PrintWriter out = new PrintWriter(socket.getOutputStream(), true);out.println(msg);}}public static void main(String[] args) throws IOException {new Server();}}7.ServerThread.javapublic class ServerThread extends Thread {private Server server = null;private Socket socket = null;private Protocol jcp = null;private String userid;public ServerThread(Socket socket, Server server) {super("jetic Chat Server");this.socket = socket;this.server = server;userid = socket.getInetAddress().getHostName();jcp = new Protocol(userid);}public void run() {PrintWriter out = null;BufferedReader in = null;String inputLine, outputLine;try {out = new PrintWriter(socket.getOutputStream(), true); in = new BufferedReader(new InputStreamReader(socket.getInputStream()));out.println("你可以开始你的闲聊了:)");while ((inputLine = in.readLine()) != null) {if (inputLine.equalsIgnoreCase("quit")) break;outputLine = jcp.processInput(inputLine);server.send(outputLine);}}catch (Exception ex) {ex.printStackTrace(System.err);Close();}finally {Close();}}private void Close() {try {server.removeClient(socket);socket.close();}catch (Exception ex) {ex.printStackTrace(System.err); }}}。
java dialog用法
java dialog用法Java中的Dialog类是一个弹出窗口。
它和普通窗口很相似,但有一些特殊的功能。
您可以使用它来显示有关消息或请求用户输入的窗口。
Dialog类有两个主要的子类:JDialog和JOptionPane。
JDialog是一个顶层容器,类似于Frame,并支持一些额外的对话框特性,例如模式对话框和防止焦点转移。
JOptionPane是一个预先定义的对话框类,其中包括一些常用的选项,例如消息对话框、输入对话框和确认对话框等。
如何使用Dialog:首先,您需要创建一个Dialog对象。
使用以下代码可创建一个简单的对话框:Dialog dialog = new Dialog(frame, "My Dialog", true);在这个例子中,frame是父窗体。
"My Dialog"参数是对话框标题。
最后的参数true表示这是一个模式对话框,这意味着用户必须在对话框关闭之前完成操作。
接下来,您需要添加一些组件(如标签、按钮、文本框)到对话框中。
然后,您可以使用setVisible()函数将对话框显示出来。
dialog.setVisible(true);最后,您需要为对话框添加事件处理程序,例如处理“关闭对话框”按钮的事件。
Dialog类有一些其他的方法,例如pack()用于调整对话框大小,validate()用于验证布局,以及dispose()用于释放对话框的资源并关闭它。
总结:Dialog类是Java Swing API中的弹出窗口类。
它可以让您显示有关消息或请求用户输入的窗口。
Dialog类有两个主要的子类:JDialog和JOptionPane。
JDialog是一个顶层容器,而JOptionPane是一个预先定义的对话框类。
使用Dialog的步骤是创建一个Dialog对象,添加组件,将对话框可见,为对话框添加事件处理程序,然后使用Dialog类的其他方法进行必要的调整和验证。
Java实现简单的QQ聊天
一、界面的介绍
1、登录界面
第一次登录需要注册,该程序使用的数据库是 Mysql。首先要建立 test 数据 库,在 test 数据库中创建一个表 jdbctest。
从表中可以看出有 8 个字段,除 id 外(设置为自动分配) 。 2、注册界面 点击立刻注册按钮,会弹出注册窗口:
二、以下是完整的代码:
1、ChatServe.java:
package Chat; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.EOFException;
import java.io.IOException; import .*; import java.util.*; public class ChatServer { static boolean started = false; static boolean bconnected = false; static ServerSocket ss = null; static Socket s = null; ArrayList<Client> clients = new ArrayList<Client>(); public static void main(String[] args) { new ChatServer().start(); } public void start(){ try { ss = new ServerSocket(8888); started=true; }catch (BindException e) { System.out.println("端口使用中......."); }catch (IOException e) { e.printStackTrace(); } try{ while(started){ s = ss.accept(); Client c = new Client(s); System.out.println("a client connect"); new Thread(c).start(); clients.add(c); } }catch (IOException e) { e.printStackTrace(); }finally{ try { ss.close(); } catch (IOException e) { e.printStackTrace(); } } }
JAVA聊天程序设计代码及报告
JAVA聊天程序设计代码及报告import java.io.BufferedReader;import java.io.InputStreamReader;import java.io.PrintWriter;import java.util.Scanner;public class ChatClientpublic static void main(String[] args)final String HOST_NAME = "localhost";final int PORT_NUMBER = 1234;trySocket socket = new Socket(HOST_NAME, PORT_NUMBER);System.out.println("Connected to chat server!");BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream());PrintWriter writer = new PrintWriter(socket.getOutputStream(, true);// read user input in a separate threadThread inputThread = new Thread(( ->Scanner scanner = new Scanner(System.in);while (true)String userInput = scanner.nextLine(;writer.println(userInput);}});inputThread.start(;// continuously read server responsesString serverResponse;while ((serverResponse = reader.readLine() != null)System.out.println("Server: " + serverResponse);}} catch (Exception e)System.out.println("Error: " + e.getMessage();}}该聊天程序是一个基于TCP协议的客户端程序,使用了Java Socket 进行通信。
JAVA局域网聊天系统源代码
JAVA局域网聊天系统源代码【附件】附件1:JAVA局域网聊天系统源代码:zip【法律名词及注释】1:局域网(LAN):指在有限的地理范围内构建的计算机网络,用于连接位于同一建筑物或同一物理区域的计算机设备。
2:源代码(source code):指计算机程序的人类可读形式,通常采用编程语言编写的文本文件。
源代码需要经过编译才能转换为机器可执行的形式。
3:聊天系统(chat system):指一种通过计算机网络实现用户之间即时通信的系统,用户可以发送文字、图片、音频、视频等信息,并能够实时接收、查看其他用户发送的信息。
【正文】1:引言1.1 目的1.2 背景1.3 范围2:系统概述2.1 功能概述2.2 系统组成2.3 技术选型3:系统设计3.1 用例图3.2 类图3.3 数据库设计3.4 网络通信设计3.5 用户界面设计4:功能模块4.1 用户注册登录模块 4.1.1 注册功能4.1.2 登录功能4.2 好友管理模块4.2.1 好友列表展示 4.2.2 添加好友功能 4.2.3 删除好友功能4.3 聊天功能模块4.3.1 发送文本消息 4.3.2 发送图片消息 4.3.3 发送音频消息 4.3.4 发送视频消息 4.4 群组功能模块4.4.1 创建群组4.4.2 加入群组4.4.3 群组聊天5:系统实现5.1 开发环境5.2 开发工具5.3 源代码结构5.4 主要代码逻辑解析6:测试与部署6.1 单元测试6.2 集成测试6.3 UI测试6.4 部署配置7:系统运行与维护7.1 运行环境7.2 系统运行步骤7.3 常见问题与解决方法7.4 系统维护与升级【附件】附件1:JAVA局域网聊天系统源代码:zip【法律名词及注释】1:局域网(LAN):指在有限的地理范围内构建的计算机网络,用于连接位于同一建筑物或同一物理区域的计算机设备。
2:源代码(source code):指计算机程序的人类可读形式,通常采用编程语言编写的文本文件。
java简单的聊天窗口代码
要创建一个简单的Java聊天窗口,您可以使用Java的图形用户界面(GUI)工具包Swing。
以下是一个基本的聊天窗口示例:```javaimport javax.swing.*;import java.awt.*;import java.awt.event.*;public class ChatWindow extends JFrame implements ActionListener {private JTextField inputField;private JTextArea chatArea;private String message = "";public ChatWindow() {super("简单聊天窗口");setSize(400, 300);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);inputField = new JTextField();chatArea = new JTextArea();JButton sendButton = new JButton("发送");sendButton.addActionListener(this);JScrollPane scrollPane = new JScrollPane(chatArea);chatArea.setAutoscrolls(true);getContentPane().add(inputField,BorderLayout.SOUTH);getContentPane().add(sendButton, BorderLayout.EAST); getContentPane().add(scrollPane,BorderLayout.CENTER);}public void actionPerformed(ActionEvent e) {if (e.getSource() == sendButton) {message += inputField.getText() + "\n";chatArea.append(inputField.getText() + "\n");inputField.setText(""); // 清空输入框}}public static void main(String[] args) {ChatWindow chatWindow = new ChatWindow();}}```这个程序创建了一个简单的聊天窗口,用户可以在输入框中输入消息,然后点击"发送"按钮将消息发送到聊天区域。
Java UDP网络通信案例-模拟微信聊天功能
模拟微信聊天【案例介绍】1.案例描述在如今,微信聊天已经人们生活中必不可少的重要组成部分,人们的交流很多都是通过微信来进行的。
本案例要求:将多线程与UDP通信相关知识结合,模拟实现微信聊天小程序。
通过监听指定的端口号、目标IP地址和目标端口号,实现消息的发送和接收功能,并显示聊天的内容。
2.运行结果运行结果【案例目标】●学会分析“模拟微信聊天”任务的实现思路。
●根据思路独立完成“模拟微信聊天”任务的源代码编写、编译及运行。
●掌握网络通信中UDP协议的编程原理。
●掌握UDP网络通信DatagramPacket和DatagramSocket的使用。
【案例分析】(1)第一要知道用什么技术实现,通过上述任务描述可知此任务是使用多线程与UDP通信相关知识实现的。
要实现图中的聊天窗口界面。
首先需要定义一个实现微信聊天功能的类,类中需要定义访问微信聊天的输出语句,从而获取输入的发送端端口号、接收端端口号以及实现发送和接收功能的方法。
(2)实现发送数据的功能。
该功能通过一个实现了Runnable接口的类实现,类中需要定义获取发送数据的端口号,并在实现run()的方法中,编写发送数据的方法。
(3)实现接收数据的功能。
该功能通过一个实现了Runnable接口的类实现,类中需要定义获取接收数据的端口号,并在实现run()的方法中,编写显示接收到的数据的方法。
(4)创建完所有的类与方法后,运行两次程序,同时开启两个窗口来实现聊天功能。
【案例实现】(1)创建微信聊天程序,开启两个聊天窗口,需要创建两个聊天程序。
两个聊天程序代码分别如下所示。
Room.java1 package chapter0901;2 import java.util.Scanner;3 public class Room {4 public static void main(String[] args) {5 System.out.println("微信聊天欢迎您!");6 Scanner sc = new Scanner(System.in);7 System.out.print("请输入您的微信号登录:");8 int sendPort = sc.nextInt();9 System.out.print("请输入您要发送消息的微信号:");10 int receivePort = sc.nextInt();11 System.out.println("微信聊天系统启动!!");12 //发送操作13 new Thread(new SendTask(sendPort), "发送端任务").start();14 //接收操作15 new Thread(new ReceiveTask(receivePort), "接收端任务").start();16 }17 }上述代码中,第12行代码用多线程实现发送端口号以及实现发送端功能的方法。
利用JAVA实现简单聊天室
利用JAVA实现简单聊天室1.设计思路Java是一种简单的,面向对象的,分布式的,解释的,键壮的,安全的,结构中立的,可移植的,性能很优异的,多线程的,动态的语言。
而且,Java 很小,整个解释器只需215K的RAM。
因此运用JAVA程序编写聊天室,实现简单聊天功能。
程序实现了聊天室的基本功能,其中有:(1)启动服务器:实现网络的连接,为注册进入聊天室做准备。
(2)注册登陆界面:填写基本信息如姓名等,可以供多人进入实现多人聊天功能。
(3)发送信息:为用户发送信息提供平台。
(4)离开界面:使用户退出聊天室。
(5)关闭服务器:断开与网络的连接,彻底退出聊天室。
2.设计方法在设计简单聊天室时,需要编写5个Java源文件:Server.java、Objecting.java、LogIn.java、ClientUser.java、Client.java。
3 程序功能图及程序相关说明(1)主功能框图(2) 聊天室基本功能表4.程序代码是说明程序中引入的包:package Chat; import .*;import java.awt.*;import java.awt.event.*;import javax.swing.*;import java.util.*;import java.io.*;(1)服务器端代码中用户自定义类:类名:Server作用:服务器启动继承的接口名:ActionListenerpublic class Server implements ActionListener{定义的对象:count //记录点机关闭按钮次数2次关闭soconly //只有SOCKET,用于群发sockets//所有客户的SOCKETsocket_thread //Socket所在的线乘,用于退出;frame // 定义主窗体panel //定义面板start,stop //启动和停止按钮主要成员方法:public void center //定义小程序查看器的位置public void actionPerformed //定义处理异常机制定义子类:serverRun,Details继承的父类名:Threadclass serverRun extends Thread //启线乘用于接收连入的Socket class Details extends Thread //具体处理消息的线乘,只管发送消息创建一个ServerSocket 对象,用于接受指定端口客户端的信息ServerSocket server = new ServerSocket("1234");接受请求时候,通过accept()方法,得到一个socket对象。
JAVA写一网络聊天程序
}
if(e.getSource()==jButton2){
String s=this.jTextField3.getText().trim();
sendData(s);
}
}
private void listenClient(int port){//侦听
MyThread t=new MyThread();
t.start();
}
}catch(Exception ex){
}
}
private void sendData(String s){//发送数据
jButton2.setBorder(BorderFactory.createEtchedBorder());
jButton2.setFont(new java.awt.Font("Dialog", 0, 14));ctangle(440, 58, 73, 25));
JAVA写一网络聊天程序:
要求:聊天室服务器、聊天室客户端;客户端之间可以聊天。
因为我是初级选手,想借此程序分析学习java,所以代码最好多一点注释...
分数有限,望大家不吝赐教!!问题补充:
需要图形用户界面哦,最好用swing组件
服务器端:采用多线程,可以向客户广播:当前聊天室人数,客户名称列表,客户进入离开提示;
jTextField3.setBounds(new Rectangle(114, 60, 314, 24));
jTextField3.setText("");
jButton2.setText("发送");
JavaSocket实现聊天室附1500行源代码
JavaSocket实现聊天室附1500⾏源代码⽬录项⽬需求分析基础分析项⽬部分代码摘要Dao的链表存储实现ServerListenServerReceive再看⼀下客户端的ClientReceive项⽬问题选择框中出现的不是⽤户名服务端点击消息发送按钮没有反应不能显⽰在线⼈数服务端退出时没有消息Java养成计划(打卡第31,2天)内容管理:Sockect聊天室的实现Java界⾯使⽤了各种组件,对于这部分不了解的不⽤担⼼,⽬前掌握⼀个⼤概就OK项⽬需求分析需要完成⼀个简单聊天⼯具的界⾯及功能,实现服务器中转下的多客户端之间的通信,系统完成的功能有程序启动后能看到当前有那些机器上线,可弹出对话聊天框,可以在其中编辑要发送的聊天信息,并进⾏发送⼀旦某个⽹内的机器上线了,可即时通知,并能更新⽤户界⾯的⽤户列表双击某个列表项时,可弹出对话聊天框,可以在其中编辑要发送的信息并发送聊天界⾯⼈性化,下⾯时发送框,上⾯有已有聊天记录,并借助滚动条看到当次所有聊天记录当有⼈向本机器发送消息时,可显⽰⽤户接收到的信息,并且显⽰是谁所发,同时进⾏信息的回复基础分析⾸先这是⼀个聊天⼯具,使⽤的是C/S结构,要模拟就要使⽤net的Scocket和ServerSocket模拟客户端和服务端这⾥综合运⽤了多种知识,已经不再是简单的java SE知识,其中界⾯编程占据主要代码,这⾥可以贴⼏张图看看效果,这是我肝了2天才肝完的,这⾥已经可以实现多态设备的连接分为3个包Sever包主要是服务器的相关代码,主要是实现与⽤户的交互Dao包是模拟的数据库包,存储所有的⽤户信息,实现增删改的操作Client是客户代码包,只要在电脑上运⾏这⾥的代码,就可以出现客户端界⾯,约定好ip和端⼝号就可以通信了。
这⾥就真正实现了客户端型软件,只是软件功能简单,可以使⽤web编程实现另外⼀种架构可以来看⼀下界⾯再来看⼀下客户端和服务端的交流项⽬部分代码摘要Dao的链表存储实现package Dao;/*** 演⽰程序为了简化就不⽤数据库存储,使⽤单链表完成数据库各项功能* 这⾥⼀定要写测试代码检查各项功能是否可⽤* 最开开始我测试了add,del,find功能,却没有测试getCount功能,结果存在问题,后⾯突然放开测试才发现错误 */public class UserLinkList {private Node head;private int count;public boolean addUser(Node client){if(head == null){//头节点也存储数据head = client;count++;return true;}else {Node p = head;for(;p.next != null;p = p.next);{p.next = client;count++;return true;}}}public int getCount() {return count;}public Node findUser(String name){Node p = head;while(p != null )//p.next != null没有包含最后⼀个结点{if(ername.equals(name)){return p;}p = p.next;}return null;}public Node findUser(int index){int pos = 0;Node p = head;while(p != null&& pos < index){p = p.next;pos++;}if(p != null&& pos == index){return p;}return null;}public boolean delUser(Node client){//删除后长度也要减少Node p = head;if(ername.equals(ername)){//删除头结点head = head.next;count--;return true;}while(p != null){//忘记循环了if(ername.equals(ername)){p.next = p.next.next;count--;return true;}p = p.next;}return false;}/*** 这⾥可以设置⼀个显⽰的⽅法,供检查使⽤*/public void display() {Node p = head;int pos = 1;while(p != null){System.out.println("第"+pos + "个⽤户"+ername);p = p.next;pos++;}}}/*public static void main(String[] args) {//经过测试发现没有问题,可以正常使⽤ Node client1 = new Node();ername = "张三";Node client2 = new Node();ername = "李四";Node client3 = new Node();ername = "王五";//其他的就不测试了,反正该项就可以测试了UserLinkList userLinkList = new UserLinkList();//⾃动初始化userLinkList.addUser(client1);userLinkList.addUser(client2);userLinkList.addUser(client3);// userLinkList.display();Node node = userLinkList.findUser(0);userLinkList.delUser(node);userLinkList.display();System.out.println(userLinkList.getCount());}*/现在编写这段代码应当是⾮常简单的,注意⼀定要测试ServerListen简单看⼀下这个监听线程,可以监听⽤户是否上线package Server;/*** @author OMEY-PC*本程序的作⽤是实现服务器侦听的线程化,其中run⽅法通过client = new Node();创建⼀个客户端对象,通过client.socket = server.accept来设定接⼝,通过client.input *output来建⽴输⼊输出流*/import java.io.*;import .*;import Dao.*; //连接数据import javax.swing.*;public class ServerListen extends Thread{ServerSocket server;JComboBox combobox;JTextArea textarea;JTextField textfield;UserLinkList userLinkList;Node client;ServerReceive recvThread;public boolean isStop;/*** 聊天服务端的⽤户上下线侦听类*/public ServerListen(ServerSocket server,JComboBox combobox,JTextArea textarea,JTextField textField,UserLinkList userLinkList) {this.server = server;bobox = combobox;this.textarea = textarea;this.textfield = textField;erLinkList = userLinkList;isStop = false;}@Overridepublic void run() {while(!isStop && !server.isClosed())//没有停⽌服务{try {client = new Node();client.socket = server.accept();//⽤来指代所连接的客户端client.output = new ObjectOutputStream(client.socket.getOutputStream());client.output.flush();client.input = new ObjectInputStream(client.socket.getInputStream());ername = (String)client.input.readObject();//显⽰提⽰信息combobox.addItem(ername);//改成⽤户名userLinkList.addUser(client);textarea.append("⽤户" + ername+"上线"+"\n");textfield.setText("在线⽤户"+ userLinkList.getCount()+"⼈\n");recvThread = new ServerReceive(textarea,textfield,combobox,client,userLinkList);recvThread.start();//启动线程}catch (Exception e) {e.printStackTrace();}}}}ServerReceive该线程实现服务器与⽤户之间的信息交互package Server;/*** @author OMEY-PC*服务器收发消息的类*/import .ServerSocket;import javax.swing.*;import Dao.*;public class ServerReceive extends Thread{JTextArea textarea;//消息展⽰域JTextField textfield;//⽂本输⼊域JComboBox combobox; //复选框Node client;//⽤户UserLinkList userLinkList;public boolean isStop;public ServerReceive(JTextArea textarea, JTextField textfield, JComboBox combobox, Node client,UserLinkList userLinkList) {this.textarea = textarea;this.textfield = textfield;bobox = combobox;this.client = client;erLinkList = userLinkList;isStop = false;}@Overridepublic void run(){//向所有⼈发送⽤户的列表sendUserList();while(!isStop && !client.socket.isClosed()){try {//类型,对谁,状况,⾏为,信息String type = (String)client.input.readObject();if(type.equalsIgnoreCase("聊天信息")){String toSomebody =(String)client.input.readObject();//从客户端接收信息String status = (String)client.input.readObject();String action = (String)client.input.readObject();String message = (String)client.input.readObject();String msg = ername+" "+ action + "对"+ toSomebody +" 说 " + message + "\n";//接收的消息 if(status.equalsIgnoreCase("悄悄话")){msg = "[悄悄话]" + msg; //若为悄悄话,就在前⾯加上标识}textarea.append(msg);if(toSomebody.equalsIgnoreCase("所有⼈")){sendToAll(msg);//这⾥是接受的⽤户消息,和之前的向所有⼈发消息不⼀样}else {//向⽤户发消息try {client.output.writeObject("聊天信息");client.output.flush();//刷新流client.output.writeObject(msg);client.output.flush();}catch (Exception e) {e.printStackTrace();}Node node = userLinkList.findUser(toSomebody);if(node != null){node.output.writeObject("聊天信息");node.output.flush();node.output.writeObject(msg);//向选定信息发送信息node.output.flush();//刷新输出流缓冲区中的信息}}}else if(type.equalsIgnoreCase("⽤户下线")){Node node = userLinkList.findUser(ername);userLinkList.delUser(node);String msg = "⽤户"+ ername +"下线\n";int count = userLinkList.getCount();combobox.removeAllItems();combobox.addItem("所有⼈");int i = 0;while(i < count){node = userLinkList.findUser(i);if(node == null){i++;continue;}combobox.addItem(ername);i++;}combobox.setSelectedIndex(0);//选择第⼀个,所有⼈textarea.append(msg);textfield.setText("在线⽤户"+ userLinkList.getCount() +"⼈\n");sendToAll(msg);sendUserList();//重新发送⽤户列表break;}}catch (Exception e) {e.printStackTrace();}}}/*** 向所有⼈发送消息*/public void sendToAll(String msg){int count = userLinkList.getCount();int i = 0;while(i < count){//给⽤户列表中的每⼀个⼈都发送消息Node node = userLinkList.findUser(i);if(node == null){i++;continue;}try {//输出流node.output.writeObject("聊天信息");node.output.flush();node.output.writeObject(msg);//聊天消息写⼊输出流(to client)node.output.flush();}catch (Exception e) {e.printStackTrace();}i++;}}/*** 向所有⼈发送⽤户列表*/public void sendUserList() {String userList = "";int count = userLinkList.getCount();int i = 0;while(i < count){Node node = userLinkList.findUser(i);if(node == null){i++;continue;}userList += ername;userList += "\n";i++;}i = 0; //给每个⼈发送消息while(i < count){Node node = userLinkList.findUser(i);if(node == null){i++;continue;}try {node.output.writeObject("⽤户列表");node.output.flush();node.output.writeObject(userList);node.output.flush();}catch (Exception e) {e.printStackTrace();}}i++;}}/*** 本程序可以实现通过线程向所有⼈发送消息,⽤户列表,以及向选定的⼈发送聊天消息等,主要是是实现服务端收发消息的线程化,其中sendUserList()发送列表, * client.input.redObject()获取客户端发送到服务端的消息,通sendToAll(),将发送到发送到所有⼈的信息发送到各个客户端*/再看⼀下客户端的ClientReceive该线程是实现客户端与系统之间的信息交互,注解丰富package Client;import java.io.*;import .*;import javax.swing.*;public class ClientReceive extends Thread{private JComboBox combobox;private JTextArea textarea;Socket socket;ObjectOutputStream output;ObjectInputStream input;JTextField showStatus;public ClientReceive(JComboBox combobox, JTextArea textarea, Socket socket, ObjectOutputStream output,ObjectInputStream input, JTextField showStatus) {bobox = combobox;this.textarea = textarea;this.socket = socket;this.output = output;this.input = input;this.showStatus = showStatus;}@Overridepublic void run() {//从服务端获得消息while(!socket.isClosed()){try {String type = (String)input.readObject();//获得流,read读取信息if(type.equalsIgnoreCase("系统信息")){String sysmsg = (String)input.readObject();textarea.append("系统信息" + sysmsg);}else if(type.equalsIgnoreCase("服务关闭")){output.close();input.close();socket.close();textarea.append("服务器已经关闭!\n");break;}else if(type.equalsIgnoreCase("聊天信息")){String message = (String)input.readObject();textarea.append(message);}else if(type.equalsIgnoreCase("⽤户列表")){String userlist = (String)input.readObject();String[] usernames = userlist.split("\n"); //⽤换⾏符分隔combobox.removeAll();//先移出去int i = 0;combobox.addItem("所有⼈");while(i < usernames.length){combobox.addItem(usernames[i]);i++;}combobox.setSelectedIndex(0);showStatus.setText("在线⽤户"+ usernames.length +" ⼈");}}catch (Exception e) {e.printStackTrace();}}}}其余的界⾯的部分就不放出来了,代码太长,每个都有400多⾏,如果有兴趣,就到我的gitee上去浏览,后⾯会放上地址项⽬问题选择框中出现的不是⽤户名查找相应模块发现是因为addItem中添加的时结点,⽽不是结点中的username,修改后正常服务端点击消息发送按钮没有反应查找监听器部分,发现监听器监听该部分代码写错,将button⼜写成sysMessage不能显⽰在线⼈数查找侦听线程,启动客户端发现抛出异常Cannot invoke “javax.swing.JTextField.setText(String)” because “this.textfield” is nulltextfield为空,查找问题源头;发现在构造⽅法中:the assignmen to variable has no effect;这是因为单词拼写错误,编译器并没有报错服务端退出时没有消息系统报错Cannot read field “input” because “node” is null意识到问题出在链表上,系统要求从0开始,⽽链表中的序号是从1开始的,修该链表中的findUser中的pos为0就解决写这个程序写了两天,直接废了~~到此这篇关于Java Socket实现聊天室附1500⾏源代码的⽂章就介绍到这了,更多相关Java Socket内容请搜索以前的⽂章或继续浏览下⾯的相关⽂章希望⼤家以后多多⽀持!。
JAVA聊天程序设计代码及报告
一.系统需求分析网络聊天室通常直称聊天室;是一种人们可以在线交谈的网络论坛;在同一聊天室的人们通过广播消息进行实时交谈..在当今信息时代;越来越多的聊天工具被应用;java语言是当今流行的网络编程语言;它具有面向对象;与平台无关;安全;多线程等特点..使用java语言不仅可以实现大型企业级的分布式应用系统;还能够为小型的的;嵌入式设备进行应用程序的开发..面向对象的开发是当今世界最流行的开发方法;它不仅具有更贴近自然地语义;而且有利于软件的维护和继承;锻炼我们熟练地应用面向对象的思想和设计方法解决实际问题的能力..本程序正是用java语言实现了简单聊天功能..它是图形界面;线程;流与文件系统等技术的综合应用..其界面主要采用了java.awt包;java.swing包等..二.系统总体设计1.对性能的规定由于本软件知识一个聊天程序;程序只提供用户之间的聊天功能;故对网络传输数据要求不是很高;只要正常的传输速度就可以了..2数据管理IP地址IP;端口Port3.开发环境本软件采用Java语言编写;Java语言是一种跨平台的编程语言;所以本软件对操作系统没有特别的要求..而网络传输方面采用TCP/IP网络传输协议或者是RMI..4.设计概要1本软件客户端与用户共用一段程序..客户端编译运行后;在窗口选择----侦听..用户编译运行后;在窗口选择----连接..2本软件实现的功能有1允许服务器侦听客户端;客户端连接到服务器2允许服务区与客户端之间进行聊天;3允许服务器与客户端更改背景颜色;4 允许服务器与客户端更改字体颜色;5服务器与客户端时;会显示内容发送时间;6允许服务器与客户端用鼠标点击“发送”;按ENTER键均可发送内容7允许服务器与客户端用鼠标点击关闭时关闭聊天窗口三.系统详细设计1.代码功能描述1程序中引入的包:import java.awt.;import java.awt.event.;import javax.swing.;import java.;import java.io.;2代码中自定义的类:类名:chatHouse继承的类:JFrame实现的接口:ActionListener; Runnable作用:构造服务器界面以及客户端界面..定义的对象: TextArea ta;JTextField ip;JTextField port;JButton btn_server;JButton btn_client;JButton btn_backGroundCol;JButton btn_fontCol;JTextField send_text;JButton btn_send;JButton btn_close;JLabel pic;Socket skt;构造方法:public chatHouse主要成员方法:public void runpublic void actionPerformedActionEvent epublic void doServerpublic void doSend2.源代码chatHouse.javaimport java.awt.;import java.awt.event.;import javax.swing.;import java.;import java.io.;import java.util.;public class chatHouse extends JFrame implements ActionListener; Runnable{private TextArea ta;private JTextField ip;private JTextField port;private JButton btn_server;private JButton btn_client;private JButton btn_backGroundCol;private JButton btn_fontCol;private JTextField send_text;private JButton btn_send;private JButton btn_close;private JLabel pic;private Socket skt;public void run{try{BufferedReader br = new BufferedReadernew InputStreamReaderskt.getInputStream;whiletrue{String s = br.readLine; // 从网络读ifs==null break;ta.appends + "\n";}}catchException e{e.printStackTrace;}}public void actionPerformedActionEvent e{ife.getSource==btn_server{doServer;}ife.getSource==btn_client{doClient;}ife.getSource==btn_send{doSend;}}public void doServer{try{ServerSocket server = newServerSocketInteger.parseIntport.getText;skt = server.accept;ta.append"连接成功\n";new Threadthis.start;}catchException e{ta.append"服务器启动失败\n";}}public void doClient{try{skt = new Socketip.getText; Integer.parseIntport.getText;ta.append"连接成功\n";new Threadthis.start;}catchException e{ta.append"连接失败\n";}}public void doSend{Calendar c=Calendar.getInstance;int y=c.getc.YEAR;int M=c.getc.MONTH+1;int d=c.getc.DAY_OF_MONTH;int h=c.getc.HOUR_OF_DAY;int mm=c.getc.MINUTE;int ss=c.getc.SECOND;try{PrintWriter pw = new PrintWriterskt.getOutputStream;String s = send_text.getText;ifs==null return;ta.appendy+"-"+M+"-"+d+" "+h+":"+mm+":"+ss+"\n";ta.appends+"\n";pw.printlny+"-"+M+"-"+d+" "+h+":"+mm+":"+ss;pw.printlns;pw.flush;send_text.setText"";}catchException e{ta.append"发送失败\n";}}public chatHouse{super"聊天室";this.setBounds100;100;550;430;Container cc = this.getContentPane;JPanel p1 = new JPanel;cc.addp1; BorderLayout.NORTH;JPanel p2 = new JPanel;cc.addp2;BorderLayout.CENTER;JPanel p3 = new JPanel;cc.addp3;BorderLayout.SOUTH;pic=new JLabelnew ImageIcon"12.gif";cc.addpic;BorderLayout.EAST;p1.addnew JLabel"IP: ";ip = new JTextField"127.0.0.1"; 10;p1.addip;p1.addnew JLabel"Port: ";port = new JTextField"7777"; 4;p1.addport;btn_server = new JButton"侦听";p1.addbtn_server;btn_client = new JButton"连接";p1.addbtn_client;btn_backGroundCol =new JButton"背景色";p1.addbtn_backGroundCol;btn_fontCol =new JButton"字体颜色";p1.addbtn_fontCol;p2.setLayoutnew BorderLayoutta = new TextArea;p2.addta; BorderLayout.CENTER;send_text = new JTextField"Hello.";p2.addsend_text; BorderLayout.SOUTH;btn_send = new JButton"发送";p3.addbtn_send; BorderLayout.WEST;btn_close =new JButton"关闭";p3.addbtn_close; BorderLayout.CENTER;//---------------------------------------"关闭"按钮监听器 btn_close.addActionListenernew ActionListener{public void actionPerformedActionEvent e{System.exit100;}};//--------------------------------------- 背景变色监听btn_backGroundCol.addActionListenernew ActionListener{public void actionPerformedActionEvent e{JColorChooser chooser4=new JColorChooser;Color color=chooser4.showDialognull;"背景颜";Color.yellow; ta.setBackgroundcolor;}};//---------------------------------------字体变色监听btn_fontCol.addActionListenernew ActionListener{public void actionPerformedActionEvent e{JColorChooser chooser4=new JColorChooser;Color color=chooser4.showDialognull;"字体颜色";Color.black; send_text.setForegroundcolor;ta.setForegroundcolor;}};//---------------------------------------按ENTER键可发送监听btn_server.addActionListenerthis;btn_client.addActionListenerthis;btn_send.addActionListenerthis;setDefaultCloseOperationJFrame.EXIT_ON_CLOSE;send_text.addKeyListenernew KeyAdapter{public void keyPressedKeyEvent e{ife.getKeyCode==KeyEvent.VK_ENTERdoSend;}};}public static void mainString args{new chatHouse.setVisibletrue;}}import java.util.;3.程序测试编译运行程序后;先选择对方IP;选择同样的Port..服务器先侦听;客户端再连接..连接成功;窗口会显示“连接成功”字样..接下来就可以聊天了..1 服务器与客户端聊天..2服务器与客户端聊天..服务器将背景颜色设为粉红;字体颜色设为蓝色.. 客户端将背景颜色设为蓝色;字体颜色设为红色..四.小结1.通过本次课程设计;使得自己懂得理论和实践相结合起来;从理论中得出结论;才能真正掌握这门技术;也提高了自己独立思考的能力;在设计的过程中;可以自己解决..真正体会到要将一门知识学的更深入;必须加强实践;多练习;才能发现问题所在..2..本程序实现的功能还比较简单不够完善;从中;我知道了自己的不足之处;决心增长自己的知识;设计更加好的程序;实现各种更加复杂的功能;如:传输文件;图片..以及登陆界面;昵称等..3.总的来说;这次实训对我很有帮助..让我学会了的不只是设计JAVA聊天室;更让我学会主动学习;而不是被动接收..这样才能更好的运用自己所学到的知识..另:附该代码所用到的图片 12.gif。
JAVAWEB制作简易聊天室1
三 程序源码: 登录页面 index.jsp,就是先进行一下初始化,然后重定向到主页面 ChatRoom.jsp,代码如下:<%@page import="java.util.*"%> <% ArrayList al_say=new ArrayList(); //创建 ArrayList 数组 application.setAttribute("say",al_say); response.sendRedirect("ChatRoom.jsp"); %>主聊天页面 ChatRoom.jsp 有两部分:form 表单用于输入提交聊天信息;另一部分用于显示聊 天内容。
<%@page contentType="text/html;charset=GBK"%> <%@page import="java.util.*"%> <form method=post action="say.jsp"> <input type="text" name="say"> <input type="submit" value="提交"> <input type="reset" value="重置"> </form> <hr /> <% ArrayList al_say=new ArrayList(); al_say=(ArrayList)application.getAttribute("say"); for (int says=0;says<al_say.size();says++) { %> <%=al_say.get(says)%><br /> <% } // %> 聊天信息处理页面 say.jsp 实现接收提交的聊天信息,放到 application 中,供主聊天页面 ChatRoom.jsp 显示聊天内容<%@page contentType="text/html;charset=GBK"%> <%@page import="java.util.*"%> <% String say=new String (request.getParameter("say").getBytes("iso-8859-1")); ArrayList al_say=new ArrayList(); al_say=(ArrayList)application.getAttribute("say"); al_say.add(say);response.sendRedirect("ChatRoom.jsp"); //张老师 %>。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
sendBtn.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae) {
client.sendMsg(sendArea.getText());
}
public static void main(String[] args) {
ClientUI ui = new ClientUI();
}
}
/**
* 通讯类ChatClielass ChatClient extends Thread {
ipPanel.add(new JLabel("服务器:"));
ipArea = new JTextField(12);
ipArea.setText("127.0.0.1");
ipPanel.add(ipArea);
btnLink = new JButton("连接");
panel.add(tmpPanel, BorderLayout.EAST);
panel.add(sendArea, BorderLayout.CENTER);
contain.add(mainAreaP, BorderLayout.CENTER);
contain.add(panel, BorderLayout.SOUTH);
}
});
JPanel tmpPanel = new JPanel();
indexArea = new JTextField(2);
indexArea.setText("0");
tmpPanel.add(sendBtn);
tmpPanel.add(indexArea);
setSize(500, 300);
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
ServerUI ui = new ServerUI();
JTextArea mainArea;
JTextArea sendArea;
ChatClient client;
JTextField ipArea;
JButton btnLink;
public void setClient(ChatClient client) {
this.client = client;
JScrollPane mainAreaP = new JScrollPane(mainArea);// 为文本区添加滚动条
JPanel panel = new JPanel();
panel.setLayout(new BorderLayout());
sendArea = new JTextArea(3, 8);
break;
} catch (Exception ex) {
System.out.println(ex);
}
if (msg != null && msg.trim() != "") {// 若msg信息不为空
System.out.println(">>" + msg);
BufferedReader in;
PrintWriter out;
ServerUI ui;
// ChatServer server;
public SvrCom(ServerUI ui) { // 初始化SvrCom类
this.ui = ui;
ui.setServer(this);
sendArea = new JTextArea(3, 8);
JButton sendBtn = new JButton("发送");
sendBtn.addActionListener(new ActionListener()// 注册动作监听器
{
public void actionPerformed(ActionEvent ae) {
ClientUI.this.setClient(client);
}
});
panel.add(sendBtn, BorderLayout.EAST);
panel.add(sendArea, BorderLayout.CENTER);
contain.add(ipPanel, BorderLayout.NORTH);
try {
soc = new ServerSocket(6666); // 开设服务器端口6666
System.out.println("启动服务器成功,等待端口号:6666");
client = soc.accept();// 当客户机请求连接时,创建一条链接
System.out.println("连接成功!来自" + client.toString());
mainArea = new JTextArea();
JScrollPane mainAreaP = new JScrollPane(mainArea);
JPanel panel = new JPanel();
panel.setLayout(new BorderLayout());
mainArea.append("【客户端】" + sendArea.getText() + "\n");
sendArea.setText("");
}
});
JPanel ipPanel = new JPanel();
ipPanel.setLayout(new FlowLayout(FlowLayout.LEFT, 10, 10));
String msg = "";
while (true) {
try {
msg = in.readLine();// 从缓冲区读入一行字符存于msg
} catch (SocketException ex) {
System.out.println(ex);
Socket sc;// 对象sc,用来处理与服务
BufferedReader in;// 声明输入流缓冲区,用于存储服务器发来的信息
PrintWriter out;// 声明打印输出流,用于信息的发送
ClientUI ui;
public ChatClient(String ip, int port, ClientUI ui) {// 初始化ChatClient类
} catch (Exception e) {
System.out.println(e);
}
}
}
import java.io.*;
import .*;
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
import java.io.*;
import .*;
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
/**
* 用户界面ClientUI
*/
public class ClientUI extends JFrame {
this.ui = ui;
try {
sc = new Socket(ip, port); // 创建sc, 用服务器ip和端口作参数
System.out.println("已顺利联接到服务器。");
out = new PrintWriter(sc.getOutputStream(), true);
server.sendMsg(sendArea.getText());// 把信息传递到客户端
mainArea.append("【服务器】" + sendArea.getText() + "\n");// 把信息显示在服务器的聊天记录区域
sendArea.setText("");
contain.add(mainAreaP, BorderLayout.CENTER);
contain.add(panel, BorderLayout.SOUTH);
setSize(500, 300);
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
/**
* 服务端界面ServerUI
*/
public class ServerUI extends JFrame {
JTextArea mainArea;
JTextArea sendArea;
JTextField indexArea;
SvrCom server;
in = new BufferedReader(new InputStreamReader(sc.getInputStream()));
} catch (Exception e) {