java实现简单聊天室单人版
本文实例为大家分享了java实现简单聊天室的具体代码,供大家参考,具体内容如下
先整理下思路:
1.创建一个通信服务端,传入端口号和相关的流后等待客户端连接,并初始化图形界面。
2.创建一个JFrame,用于写出聊天的界面,这里界面名称由其他类传入。
3.把客户端创建的方法写进JFrame(当然这里很粗糙的方法)
4.设置按钮的监听事件,发送消息和离线功能
首先创建一个服务端的类
importjava.io.IOException; importjava.net.ServerSocket; importjava.net.Socket; importcom.jero.jframe.ChatSocketJFrame; //创建服务端 publicclassChatServerSocket{ //构造初始化方法 publicChatServerSocket(Stringname,intport)throwsIOException{ //创建Socket服务连接对象 ServerSocketserverSocket=newServerSocket(port); //等待客户端连接 Socketclient=serverSocket.accept(); //初始化聊天界面 try{ newChatSocketJFrame(name,client); }catch(Exceptione){ //TODOAuto-generatedcatchblock e.printStackTrace(); } //关闭流 serverSocket.close(); } publicstaticvoidmain(String[]args)throwsException{ newChatServerSocket("服务端",8001);//启动服务端,指定网名和端口 } }
packagecom.jero.jframe; importjava.awt.event.ActionEvent; importjava.awt.event.ActionListener; importjava.io.BufferedReader; importjava.io.IOException; importjava.io.InputStream; importjava.io.InputStreamReader; importjava.io.PrintWriter; importjava.net.InetAddress; importjava.net.Socket; importjava.net.UnknownHostException; importjavax.swing.JFrame; importjavax.swing.JPanel; importjavax.swing.JScrollPane; importjavax.swing.border.EmptyBorder; importcom.jero.socket.ChatServerSocket; importjavax.swing.JTextPane; importjavax.swing.JTextField; importjavax.swing.JButton; importjavax.swing.JTextArea; publicclassChatSocketJFrameextendsJFrameimplementsActionListener{ privateSocketsocket; privateStringname; privateJButtonBT_SEND,BT_LEAVE,BT_LOGIN; privateJTextAreatextArea; privateJPanelcontentPane; privateJTextFieldtextField; privatePrintWritercout; /** *Launchtheapplication. *@throwsException *@throwsIOException *@throwsUnknownHostException */ publicstaticvoidmain(String[]args)throwsUnknownHostException,IOException,Exception{ //实例化界面以及客户端 newChatSocketJFrame("客户端","127.0.0.1",8001); } /** *Createtheframe. */ publicChatSocketJFrame(Stringname,Socketsocket)throwsException,IOException{ //聊天室界面 super("聊天室"+name+""+InetAddress.getLocalHost()+""+socket.getPort()); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setBounds(100,100,733,519); this.textArea=newJTextArea(); this.textArea.setEditable(false); this.getContentPane().add(newJScrollPane(this.textArea)); JPanelpanel=newJPanel(); this.getContentPane().add(panel,"South"); this.textField=newJTextField(16); panel.add(this.textField); BT_SEND=newJButton("发送"); panel.add(BT_SEND); BT_SEND.addActionListener(newActionListener(){ @Override publicvoidactionPerformed(ActionEvente){ //TODOAuto-generatedmethodstub System.out.println("按钮已点击"); cout.println(name+"说:"+textField.getText()+"\n"); textArea.append("我说:"+textField.getText()+"\n"); textField.setText(""); } }); BT_LEAVE=newJButton("离线"); panel.add(BT_LEAVE); BT_LEAVE.addActionListener(newActionListener(){ @Override publicvoidactionPerformed(ActionEvente){ //TODOAuto-generatedmethodstub textArea.append("我离线"); cout.println(name+"离线\n"+"bye"); BT_LEAVE.setEnabled(false); BT_SEND.setEnabled(false); } }); this.setVisible(true); //开始创建通信 this.socket=socket; this.name=name; //获得Socket的输出流并立即刷新 this.cout=newPrintWriter(socket.getOutputStream(),true); //把网名传给对方 this.cout.println(name); //获得Socket对象的输入流,创建字符输入流 BufferedReaderbuff=newBufferedReader(newInputStreamReader(socket.getInputStream())); //接受对方的网名 Stringaline=buff.readLine(); //显示对方发送的内容 textArea.append("连接"+aline+"成功!!\n"); aline=buff.readLine(); //如果内容不为空并且对方不离线,则相互传送消息 while(aline!=null&&!aline.equals("bye")){ textArea.append(aline+"\r\n"); aline=buff.readLine(); } //当对方离线时,关闭所有的流 buff.close(); cout.close(); socket.close(); //把按钮设置为不可操作 BT_SEND.setEnabled(false); BT_LEAVE.setEnabled(false); } /** *@wbp.parser.constructor */ publicChatSocketJFrame(Stringname,Stringhost,intport)throwsUnknownHostException,IOException,Exception{ //创建客户端 this(name,newSocket(host,port)); } @Override publicvoidactionPerformed(ActionEvente){ //TODOAuto-generatedmethodstub //可以把动作监听写进此函数,这个就不演示了 } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。