• socket实例2


    第二个实例创建一个java工程,基于tomcat服务器,程序运行时会启动客户端,实现了一个客户端向其他的客户端发送即时信息的功能

     MainWindow.java

      1 package com.jikexueyuan.myjavachatclient.view;
      2 
      3 import java.awt.event.MouseAdapter;
      4 import java.awt.event.MouseEvent;
      5 
      6 import javax.swing.GroupLayout;
      7 import javax.swing.GroupLayout.Alignment;
      8 import javax.swing.JButton;
      9 import javax.swing.JFrame;
     10 import javax.swing.JPanel;
     11 import javax.swing.JTextArea;
     12 import javax.swing.JTextField;
     13 import javax.swing.LayoutStyle.ComponentPlacement;
     14 import javax.swing.border.EmptyBorder;
     15 
     16 import com.jikexueyuan.myjavachatclient.main.ChatManager;
     17 
     18 public class MainWIndow extends JFrame {
     19 
     20     /**
     21      * 
     22      */
     23     private static final long serialVersionUID = 1L;
     24     private JPanel contentPane;
     25     JTextArea txt;
     26     private JTextField ip;
     27     private JTextField send;
     28 
     29 
     30 
     31     /**
     32      * Create the frame.
     33      */
     34     public MainWIndow() {
     35         setAlwaysOnTop(true);
     36         setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     37         setBounds(100, 100, 450, 300);
     38         contentPane = new JPanel();
     39         contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
     40         setContentPane(contentPane);
     41         
     42         txt = new JTextArea();
     43         txt.setText("Ready...");
     44         
     45         ip = new JTextField();
     46         ip.setText("127.0.0.1");
     47         ip.setColumns(10);
     48         
     49         JButton button = new JButton("连接到服务器");
     50         button.addMouseListener(new MouseAdapter() {
     51             @Override
     52             public void mouseClicked(MouseEvent arg0) {
     53                 ChatManager.getCM().connect(ip.getText());
     54             }
     55         });
     56         
     57         send = new JTextField();
     58         send.setText("你好");
     59         send.setColumns(10);
     60         
     61         JButton button_1 = new JButton("发送");
     62         button_1.addMouseListener(new MouseAdapter() {
     63             @Override
     64             public void mouseClicked(MouseEvent arg0) {
     65                 ChatManager.getCM().send(send.getText());
     66                 appendText("我说:"+send.getText());
     67                 send.setText("");
     68             }
     69         });
     70         GroupLayout gl_contentPane = new GroupLayout(contentPane);
     71         gl_contentPane.setHorizontalGroup(
     72             gl_contentPane.createParallelGroup(Alignment.LEADING)
     73                 .addGroup(Alignment.TRAILING, gl_contentPane.createSequentialGroup()
     74                     .addGroup(gl_contentPane.createParallelGroup(Alignment.TRAILING)
     75                         .addGroup(gl_contentPane.createSequentialGroup()
     76                             .addContainerGap()
     77                             .addComponent(txt, GroupLayout.DEFAULT_SIZE, 434, Short.MAX_VALUE))
     78                         .addGroup(gl_contentPane.createSequentialGroup()
     79                             .addContainerGap()
     80                             .addComponent(ip, GroupLayout.DEFAULT_SIZE, 306, Short.MAX_VALUE)
     81                             .addPreferredGap(ComponentPlacement.RELATED)
     82                             .addComponent(button))
     83                         .addGroup(gl_contentPane.createSequentialGroup()
     84                             .addComponent(send, GroupLayout.DEFAULT_SIZE, 272, Short.MAX_VALUE)
     85                             .addPreferredGap(ComponentPlacement.RELATED)
     86                             .addComponent(button_1, GroupLayout.PREFERRED_SIZE, 162, GroupLayout.PREFERRED_SIZE)))
     87                     .addContainerGap())
     88         );
     89         gl_contentPane.setVerticalGroup(
     90             gl_contentPane.createParallelGroup(Alignment.LEADING)
     91                 .addGroup(gl_contentPane.createSequentialGroup()
     92                     .addGroup(gl_contentPane.createParallelGroup(Alignment.BASELINE)
     93                         .addComponent(ip, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
     94                         .addComponent(button))
     95                     .addPreferredGap(ComponentPlacement.RELATED)
     96                     .addComponent(txt, GroupLayout.DEFAULT_SIZE, 196, Short.MAX_VALUE)
     97                     .addPreferredGap(ComponentPlacement.RELATED)
     98                     .addGroup(gl_contentPane.createParallelGroup(Alignment.BASELINE)
     99                         .addComponent(send, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
    100                         .addComponent(button_1)))
    101         );
    102         contentPane.setLayout(gl_contentPane);
    103     }
    104 
    105     
    106     public void appendText(String in) {
    107         txt.append("
    "+in);
    108     }
    109 }

    StartClient.java

     1 package com.jikexueyuan.myjavachatclient.main;
     2 
     3 import java.awt.EventQueue;
     4 
     5 import com.jikexueyuan.myjavachatclient.view.MainWIndow;
     6 
     7 public class StartClient {
     8 
     9     public static void main(String[] args) {
    10         EventQueue.invokeLater(new Runnable() {
    11             public void run() {
    12                 try {
    13                     MainWIndow frame = new MainWIndow();
    14                     frame.setVisible(true);
    15                     ChatManager.getCM().setWindow(frame);
    16                 } catch (Exception e) {
    17                     e.printStackTrace();
    18                 }
    19             }
    20         });
    21     }
    22 
    23 }

    ChatManager.java

     1 package com.jikexueyuan.myjavachatclient.main;
     2 
     3 import java.io.BufferedReader;
     4 import java.io.IOException;
     5 import java.io.InputStreamReader;
     6 import java.io.OutputStreamWriter;
     7 import java.io.PrintWriter;
     8 import java.net.Socket;
     9 import java.net.UnknownHostException;
    10 
    11 import com.jikexueyuan.myjavachatclient.view.MainWIndow;
    12 
    13 
    14 public class ChatManager {
    15 
    16     private ChatManager(){}
    17     private static final ChatManager instance = new ChatManager();
    18     public static ChatManager getCM() {
    19         return instance;
    20     }
    21     
    22     MainWIndow window;
    23     String IP;
    24     Socket socket;
    25     BufferedReader reader;
    26     PrintWriter writer;
    27     
    28     public void setWindow(MainWIndow window) {
    29         this.window = window;
    30         window.appendText("文本框已经和ChatManager绑定了。");
    31     }
    32     
    33     public void connect(String ip) {
    34         this.IP = ip;
    35         new Thread(){
    36 
    37             @Override
    38             public void run() {
    39                 try {
    40                     socket = new Socket(IP, 12345);
    41                     writer = new PrintWriter(
    42                             new OutputStreamWriter(
    43                                     socket.getOutputStream()));
    44                     
    45                     reader = new BufferedReader(
    46                             new InputStreamReader(
    47                                     socket.getInputStream()));
    48                     String line;
    49                     while ((line = reader.readLine()) != null) {
    50                         window.appendText("收到:"+line);
    51                     }
    52                     writer.close();
    53                     reader.close();
    54                     writer = null;
    55                     reader = null;
    56                 } catch (UnknownHostException e) {
    57                     e.printStackTrace();
    58                 } catch (IOException e) {
    59                     e.printStackTrace();
    60                 }
    61             }
    62         }.start();
    63     }
    64     
    65     public void send(String out) {
    66         if (writer != null) {
    67             writer.write(out+"
    ");
    68             writer.flush();
    69         }else {
    70             window.appendText("当前的链接已经中断");
    71         }
    72     }
    73 }

    将工程运行起来,这里我启动2个客户端

    实现了即时通信

  • 相关阅读:
    黑产上演《三体》剧情:蠕虫病毒入侵手机群发“钓鱼”短信
    安天AVL联合小米MIUI首擒顽固病毒“不死鸟”
    阿里云存储OSS服务端签名客户端直传
    mariadb 安装配置
    NPOI 打印设置
    windows2008 r2 网络负载均衡搭建
    SqlServer数据库技巧
    达梦数据库备份还原
    ASP.NET CORE Docker发布记录
    DataReader转换
  • 原文地址:https://www.cnblogs.com/UniqueColor/p/5725663.html
Copyright © 2020-2023  润新知