java实现qq聊天软件,模拟QQ聊天

  java实现qq聊天软件,模拟QQ聊天

  00-1010向知识点核心代码服务器客户端介绍功能演示的应用。

  00-1010实施的功能和步骤:

  1.在JFrame表单中定义组件

  2.在构造函数中初始化窗体的组件。

  3.使用网络编程完成数据传输(TCP,UDP协议)

  4.监控并点击发送按钮。

  5、实现回车键发送数据。

  00-1010没有点击发送,但是因为按了回车键,数据被发送出去了。

  00-1010 GUI: Java实现形式,Swing。事实上,目前企业已经不再使用JAVA Swing的GUI。主要被一些学校和培训机构用来教学生写一些游戏,小项目,练手。

  Tcp(传输控制协议):传输控制协议。

  

目录

 

  00-1010注意:请确保在启动客户端之前启动服务器。否则,数据将会丢失。

  导入javax . swing . *;导入Java . awt . *;导入Java . awt . event . action event;导入Java . awt . event . action listener;导入Java . awt . event . key event;导入Java . awt . event . key listener;导入Java . io . *;导入Java . net . server socket;导入Java . net . socket;//服务器//注意:必须先启动服务器,再启动客户端,否则会造成数据丢失。公共类QQ简单聊天函数扩展jframe实现action listener,key listener { public static void main(string[]args){//调用构造方法new QQ简单聊天函数();}//文本字段private JTextArea jta//滚动条私有JScrollPane jsp//面板私有JPanel jp//文本框私有JTextField jtf//button private jbbutton JB;//输出流私有BufferedWriter bw=null//构造方法公共QQ简单聊天函数(){//初始化组件JTA=new JTextArea();//将文本字段设置为不可编辑JTA . Set editable(false);//在滚动条中添加文本字段,实现滚动效果JSP=new JScrollPane(JTA);//Panel jp=new JPanel();jtf=new JTextField(10);JB=new JButton( send );//在面板上添加文本框和按钮jp . Add(jtf);jp . add(JB);//在表单this.add (JSP,Borderlayout.center)中添加滚动条和面板;this.add(jp,BorderLayout。南);This.setTitle(QQ聊天服务器);this.setSize(300,300);this.setLocation(300,300);this . setdefaultcloseoperation(JFrame。EXIT _ ON _ CLOSE);this . set visible(true);//设置组件显示//TCP server//将一个监听点击事件jb.addActionListener(this)绑定到发送按钮;//将一个键盘点击事件jtf.addKeyListener(this)绑定到文本框;Try{ //创建套接字服务器套接字服务器套接字=新服务器套接字(8888);//等待客户端的连接套接字socket=server socket . accept();//获取套接字通道的输入流

   //InputStream in=socket.getInputStream(); BufferedReader br=new BufferedReader(new InputStreamReader(socket.getInputStream())); //获取Socket通道的输出流 bw=new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())); //读取数据 String Line=null; while ((Line=br.readLine())!=null){ jta.append(Line+System.lineSeparator());//拼接后换行 } //关闭serverSocket通道 serverSocket.close(); }catch(Exception e){ e.printStackTrace(); } } @Override public void actionPerformed(ActionEvent e) { //调用发送数据的方法 data(); } //行为 @Override public void keyPressed(KeyEvent e) { //判断是否是回车键 if(e.getKeyCode()==KeyEvent.VK_ENTER);{ //发送数据到Socket管道中 data(); } } @Override public void keyTyped(KeyEvent e) { } @Override public void keyReleased(KeyEvent e) { } //定义一个方法,实现发送数据到Socket管道中 private void data(){ //获取文本框中的内容 String text=jtf.getText(); //拼接需要发送的内容 text=this.getTitle()+": "+text;//获取发送人的名字和内容 //发送 try { bw.write(text); bw.newLine();//换行 bw.flush();//刷新 //发送完后,文本框内应没有内容 jtf.setText(null); } catch (Exception ex) { ex.printStackTrace(); } }}

 

  

客户端

import javax.swing.*;import java.awt.*;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.KeyEvent;import java.awt.event.KeyListener;import java.io.*;import java.net.ServerSocket;import java.net.Socket; class 客户端 extends JFrame implements ActionListener,KeyListener{ public static void main(String[] args) { //调用构造方法 new 客户端(); } //文本域 private JTextArea jta; //滚动条 private JScrollPane jsp; //面板 private JPanel jp; //文本框 private JTextField jtf; //按钮 private JButton jb; //输出流 private BufferedWriter bw=null; //构造方法 public 客户端() { //初始化组件 jta=new JTextArea(); //设置文本域不可编辑 jta.setEditable(false); //将文本域添加到滚动条中,实现滚动效果 jsp=new JScrollPane(jta); //面板 jp=new JPanel(); jtf=new JTextField(10); jb=new JButton("发送"); //将文本框和按钮添加到面板中 jp.add(jtf); jp.add(jb); //将滚动条和面板都添加到窗体中 this.add(jsp, BorderLayout.CENTER); this.add(jp,BorderLayout.SOUTH); this.setTitle("QQ聊天客户端"); this.setSize(300,300); this.setLocation(600,300); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setVisible(true);//设置组件显示 //给发送按钮绑定一个监听点击事件 jb.addActionListener(this); //给文本框绑定一个键盘点击事件 jtf.addKeyListener(this); try { //TCP客户端 //创建一个客户端的套接字(尝试连接) Socket socket=new Socket("127.0.0.1",8888); BufferedReader br=new BufferedReader(new InputStreamReader(socket.getInputStream())); //获取Socket通道的输出流 bw=new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())); //读取数据 String Line=null; while ((Line=br.readLine())!=null){ jta.append(Line+System.lineSeparator());//拼接后换行 } //关闭Socket通道 socket.close(); } catch (Exception e) { e.printStackTrace(); } } @Override public void actionPerformed(ActionEvent e) { //调用发送数据的方法 data(); } @Override public void keyPressed(KeyEvent e) { //判断是否是回车键 if(e.getKeyCode()==KeyEvent.VK_ENTER);{ //发送数据到Socket管道中 data(); } } @Override public void keyTyped(KeyEvent e) { } @Override public void keyReleased(KeyEvent e) { } //定义一个方法,实现发送数据到Socket管道中 private void data(){ //获取文本框中的内容 String text=jtf.getText(); //拼接需要发送的内容 text=this.getTitle()+": "+text;//获取发送人的名字和内容 //发送 try { bw.write(text); bw.newLine();//换行 bw.flush();//刷新 //发送完后,文本框内应没有内容 jtf.setText(null); } catch (Exception ex) { ex.printStackTrace(); } }}

其实两个实现类百分之九十以上的代码都是一样的,只不过稍微有点名称的变动而已。

 

  以上就是Java模拟QQ实现聊天互动程序的详细内容,更多关于Java聊天互动程序的资料请关注盛行IT其它相关文章!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: