[Java] 通信--局域网单对单聊天 →→→→→进入此内容的聊天室

来自 , 2020-02-12, 写在 Java, 查看 109 次.
URL http://www.code666.cn/view/01e9565c
  1. 要先打开服务器,然后才能连接客户端通信
  2. 1.服务器
  3. package s122803可视化主机与客户端通信;
  4. //凡是网络通信相关,都要这2个包
  5. import java.awt.BorderLayout;
  6. import java.awt.event.ActionEvent;
  7. import java.awt.event.ActionListener;
  8. import java.io.*;
  9. import java.net.*;          
  10.  
  11. import javax.swing.JButton;
  12. import javax.swing.JFrame;
  13. import javax.swing.JPanel;
  14. import javax.swing.JScrollPane;
  15. import javax.swing.JTextArea;
  16. import javax.swing.JTextField;
  17. public class Server extends JFrame implements ActionListener{
  18.        
  19.        
  20.         JTextArea jta=null;
  21.         JButton jb=null;
  22.         JTextField jtf=null;
  23.         JPanel jp=null;
  24.         JScrollPane jsp=null;
  25.         PrintWriter pw=null;
  26.        
  27.         public Server()
  28.         {
  29.                
  30.                 //设置窗体属性************************************************************
  31.                                 jta=new JTextArea();
  32.                                 jb=new JButton("发送");
  33.                                 jb.addActionListener(this);  //
  34.                                 jtf=new JTextField(15);
  35.                                 jp=new JPanel();   jp.add(jtf); jp.add(jb);
  36.                                 jsp=new JScrollPane(jta);
  37.                                
  38.                                  this.setTitle("服务器");//设置窗体的标题    
  39.                              this.setSize(400,300);//设置窗体的大小
  40.                              this.setDefaultCloseOperation(3);//设置关闭的方式
  41.                              this.setLocationRelativeTo(null);//设置窗体出现在屏幕中间
  42.                              this.setResizable(false);//设置窗体不可改变大小
  43.                              this.setLayout(new BorderLayout());//设置窗体为空布局
  44.                              this.add(jsp,BorderLayout.CENTER);
  45.                              this.add(jp,BorderLayout.SOUTH);
  46.                              this.setVisible(true);
  47.            //设置窗体属性************************************************************
  48.                              
  49.         try{
  50.                 ServerSocket ss=new ServerSocket(9999);        //设置服务器端口是9999
  51.                 Socket s=ss.accept();                          //监听是否有客户端登陆,只有为true才会执行下面的代码
  52.                                                        //而且监听到的端口赋给s,s就表示连接的客户端端口                  
  53.                
  54.                 BufferedReader br=new BufferedReader(new InputStreamReader(s.getInputStream()));
  55.                 /*s是客户端端口,s.getInputStream这个方法是获取客户端的输入流,从而获取客户端发送的数据
  56.                 上面这一句可以写成2句话 InputStreamReader aa=new InputStreamReader(s.getInputStream());
  57.                                      BufferedReader br=new BufferedReader(aa);       将字节流放入缓冲池       */      
  58.                  pw=new PrintWriter(s.getOutputStream(),true);
  59.                  jta.setText("客户端已接入"+"\r\n");
  60.                  String aa="已成功连接服务器";
  61.                  pw.println(aa);
  62.                
  63.             while(true)
  64.             {
  65.                 String xinxi=br.readLine();
  66.            jta.append("客户端:"+xinxi+"\r\n");            
  67.             }          
  68.           }     catch(Exception e){}
  69.        
  70.        
  71.         }
  72.        
  73.         public static void  main(String[] args)
  74.         {
  75.                 new Server();
  76.  
  77.         }
  78.  
  79.         public void actionPerformed(ActionEvent e) {
  80.                 if(e.getActionCommand().equals("发送"))
  81.                 {
  82.                         String xinxi=jtf.getText();
  83.                         jta.append("服务器:"+xinxi+"\r\n");
  84.                         pw.println(xinxi);
  85.                         jtf.setText("");
  86.                 }
  87.                
  88.         }
  89.        
  90. }
  91.        
  92. 2.客户端
  93. package s122803可视化主机与客户端通信;
  94.  
  95. import java.io.BufferedReader;
  96. import java.io.InputStreamReader;
  97. import java.io.PrintWriter;
  98. import java.net.Socket;
  99. import java.awt.BorderLayout;
  100. import java.awt.event.*;
  101.  
  102. import javax.swing.*;
  103.  
  104. public class Client extends JFrame implements ActionListener
  105. {
  106.          //声明各组件************************
  107.         JTextArea jta=null;      
  108.         JButton jb=null;
  109.         JTextField jtf=null;
  110.         JPanel jp=null;
  111.         JScrollPane jsp=null;
  112.         PrintWriter pw=null;
  113.          //声明各组件************************
  114.        
  115.         public static void  main(String[] args)
  116.         {new Client(); }
  117.                
  118.         public Client()
  119.         {  
  120.                
  121.                 //设置窗体属性************************************************************
  122.                 jta=new JTextArea();                        //创建文本域对象
  123.                 jb=new JButton("发送");                       //创建按钮对象
  124.                 jb.addActionListener(this);                 //给按钮添加事件源对象
  125.                 jtf=new JTextField(15);                     //创建文本框对象
  126.                 jp=new JPanel();   jp.add(jtf); jp.add(jb); //创建界面对象jp,在界面中添加文本框和按钮
  127.                 jsp=new JScrollPane(jta);                   //在滚动条中添加文本域
  128.                
  129.                  this.setTitle("客户端");                                    //设置窗体的标题
  130.              this.setSize(400,300);                                             //设置窗体的大小
  131.              this.setDefaultCloseOperation(3);                  //设置关闭的方式
  132.              this.setLocationRelativeTo(null);                  //设置窗体出现在屏幕中间
  133.              this.setResizable(false);                                  //设置窗体不可改变大小
  134.              this.setLayout(new BorderLayout());                //设置窗体为空布局
  135.              this.add(jsp,BorderLayout.CENTER);         //将面板jsp添加到窗体的中间区域
  136.              this.add(jp,BorderLayout.SOUTH);           //将面板jp添加到窗体的下方区域
  137.              this.setVisible(true);                     //设置窗体可见
  138.            //设置窗体属性************************************************************
  139.                        
  140.                 try{
  141.                         Socket s=new Socket("127.0.0.1",9999);          //服务器地址为127.0.0.1,端口号是9999
  142.                         pw=new PrintWriter(s.getOutputStream(),true);   //pw用来存要发送的信息
  143.                         BufferedReader br=new BufferedReader(new InputStreamReader(s.getInputStream()));
  144.                         /*s是客户端端口,s.getInputStream这个方法是获取客户端的输入流,从而获取客户端发送的数据
  145.                         上面这一句可以写成2句话 InputStreamReader aa=new InputStreamReader(s.getInputStream());
  146.                                                  BufferedReader br=new BufferedReader(aa);       将字节流放入缓冲池       */
  147.                        while(true)
  148.                        {
  149.                            String xinxi=br.readLine();                   //读取客户端发送的信息,读取一行
  150.                            jta.append("服务器:"+xinxi+"\r\n");           //文本域显示读取到的信息
  151.                        }  
  152.                   }  catch(Exception e){}
  153.        
  154.                
  155.          }
  156.  
  157.         public void actionPerformed(ActionEvent e)
  158.         {
  159.                 if(e.getActionCommand().equals("发送"))                       //如果按钮被点击
  160.                 { String xinxi=jtf.getText();                                 //得到文本框输入的内容
  161.                  jta.append("客户端:"+xinxi+"\r\n");                          //将输入的内容显示在文本域中
  162.                  pw.println(xinxi);                                           //将我要发送的信息发送出去
  163.                  jtf.setText("");                                                 //将文本框清空
  164.                 }
  165.         }
  166.        
  167.        
  168. }
  169.        
  170.        
  171.        
  172.        
  173.  

回复 "通信--局域网单对单聊天"

这儿你可以回复上面这条便签

captcha