一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服務器之家 - 編程語言 - JAVA教程 - 基于Java Socket實現一個簡易在線聊天功能(一)

基于Java Socket實現一個簡易在線聊天功能(一)

2020-04-30 09:50Past_Future JAVA教程

這篇文章主要給大家介紹基于Java Socket實現一個簡易在線聊天功能(一),分為客戶端和服務端兩段代碼,非常具有參考價值,感興趣的朋友一起學習吧

最近做了一個項目,其中有一個在線網頁交流的需求,好久沒寫代碼了,手都生疏了,于是先寫demo練練手,分享到服務器之家平臺,以此做個記錄,方便自己和大家使用。

先給大家說下實現步驟分這樣幾大步:

1、使用awt組件和socket實現簡單的單客戶端向服務端持續發送消息;

2、結合線程,實現多客戶端連接服務端發送消息;

3、實現服務端轉發客戶端消息至所有客戶端,同時在客戶端顯示;

4、把awt組件生成的窗口界面改成前端jsp或者html展示的界面,java socket實現的客戶端改為前端技術實現。

這里首先實現第一步的簡單功能,難點在于:

1、沒有用過awt組件,沒有用過java相關的監聽事件;

2、長時間沒有使用socket進行客戶端和服務端的交互,并且沒有真正進行過cs結構的開發。

實現功能的代碼如下:

客戶端:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
package chat.chat;
import java.awt.BorderLayout;
import java.awt.Frame;
import java.awt.TextArea;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Socket;
import java.net.UnknownHostException;
/**
 * 在線聊天客戶端 1、生成圖形窗口界面輪廓 2、為輪廓添加關閉事件 3、在輪廓中加入輸入區域和內容展示區域 4、為輸入區域添加回車事件
 * 5、建立服務端連接并發送數據
 *
 * @author tuzongxun123
 *
 */
public class ChatClient extends Frame {
  // 用戶輸入區域
  private TextField tfTxt = new TextField();
  // 內容展示區域
  private TextArea tarea = new TextArea();
  private Socket socket = null;
  // 數據輸出流
  private DataOutputStream dataOutputStream = null;
  public static void main(String[] args) {
    new ChatClient().launcFrame();
  }
  /**
   * 建立一個簡單的圖形化窗口
   *
   * @author:tuzongxun
   * @Title: launcFrame
   * @param
   * @return void
   * @date May 18, 2016 9:57:00 AM
   * @throws
   */
  public void launcFrame() {
    setLocation(300, 200);
    this.setSize(200, 400);
    add(tfTxt, BorderLayout.SOUTH);
    add(tarea, BorderLayout.NORTH);
    pack();
    // 監聽圖形界面窗口的關閉事件
    this.addWindowListener(new WindowAdapter() {
      @Override
      public void windowClosing(WindowEvent e) {
        System.exit(0);
        disConnect();
      }
    });
    tfTxt.addActionListener(new TFLister());
    setVisible(true);
    connect();
  }
  /**
   * 連接服務器
   *
   * @author:tuzongxun
   * @Title: connect
   * @param
   * @return void
   * @date May 18, 2016 9:56:49 AM
   * @throws
   */
  public void connect() {
    try {
      // 新建服務端連接
      socket = new Socket("127.0.0.1", 8888);
      // 獲取客戶端輸出流
      dataOutputStream = new DataOutputStream(socket.getOutputStream());
      System.out.println("連上服務端");
    } catch (UnknownHostException e) {
      e.printStackTrace();
    } catch (IOException e) {
      e.printStackTrace();
    }
  }
  /**
   * 關閉客戶端資源
   *
   * @author:tuzongxun
   * @Title: disConnect
   * @param
   * @return void
   * @date May 18, 2016 9:57:46 AM
   * @throws
   */
  public void disConnect() {
    try {
      dataOutputStream.close();
      socket.close();
    } catch (IOException e) {
      e.printStackTrace();
    }
  }
  /**
   * 向服務端發送消息
   *
   * @author:tuzongxun
   * @Title: sendMessage
   * @param @param text
   * @return void
   * @date May 18, 2016 9:57:56 AM
   * @throws
   */
  private void sendMessage(String text) {
    try {
      dataOutputStream.writeUTF(text);
      dataOutputStream.flush();
    } catch (IOException e1) {
      e1.printStackTrace();
    }
  }
  /**
   * 圖形窗口輸入區域監聽回車事件
   *
   * @author tuzongxun123
   *
   */
  private class TFLister implements ActionListener {
    @Override
    public void actionPerformed(ActionEvent e) {
      String text = tfTxt.getText().trim();
      tarea.setText(text);
      tfTxt.setText("");
      // 回車后發送數據到服務器
      sendMessage(text);
    }
  }
}

服務端:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
package chat.chat;
import java.io.DataInputStream;
import java.io.EOFException;
import java.io.IOException;
import java.net.BindException;
import java.net.ServerSocket;
import java.net.Socket;
/**
 * java使用socket和awt組件簡單實現在線聊天功能服務端 可以實現一個客戶端連接后不斷向服務端發送消息
 * 但不支持多個客戶端同時連接,原因在于代碼中獲得客戶端連接后會一直循環監聽客戶端輸入,造成阻塞
 * 以至于服務端無法二次監聽另外的客戶端,如要實現,需要使用異步或者多線程
 *
 * @author tuzongxun123
 *
 */
public class ChatServer {
  public static void main(String[] args) {
    // 是否成功啟動服務端
    boolean isStart = false;
    // 服務端socket
    ServerSocket ss = null;
    // 客戶端socket
    Socket socket = null;
    // 服務端讀取客戶端數據輸入流
    DataInputStream dataInputStream = null;
    try {
      // 啟動服務器
      ss = new ServerSocket(8888);
    } catch (BindException e) {
      System.out.println("端口已在使用中");
      // 關閉程序
      System.exit(0);
    } catch (Exception e) {
      e.printStackTrace();
    }
    try {
      isStart = true;
      while (isStart) {
        boolean isConnect = false;
        // 啟動監聽
        socket = ss.accept();
        System.out.println("one client connect");
        isConnect = true;
        while (isConnect) {
          // 獲取客戶端輸入流
          dataInputStream = new DataInputStream(
              socket.getInputStream());
          // 讀取客戶端傳遞的數據
          String message = dataInputStream.readUTF();
          System.out.println("客戶端說:" + message);
        }
      }
    } catch (EOFException e) {
      System.out.println("client closed!");
    } catch (Exception e) {
      e.printStackTrace();
    } finally {
      // 關閉相關資源
      try {
        dataInputStream.close();
        socket.close();
      } catch (IOException e) {
        e.printStackTrace();
      }
    }
  }
}

以上所述是小編給大家介紹的Java Socket實現一個簡易在線聊天功能(一)的相關知識,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對服務器之家網站的支持!

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 欧美一级裸片又黄又裸 | 美女女女女女女bbbbbb毛片 | 欧美灰丝袜丝交nylons | 日韩精品福利视频一区二区三区 | 朝鲜女人性猛交 | 欧亚专线欧洲m码可遇不可求 | 啊好大好粗 | 国产亚洲精品精品国产亚洲综合 | 欧美ggg666| 欧美视频久久 | 亚洲一区二区三区免费视频 | 好男人资源免费播放在线观看 | 福利一区在线观看 | 2048论坛永久入口 原创合集 | 五月最新商场女厕所高跟嘘嘘 | 久久亚洲精品成人 | 天堂网在线.www天堂在线资源 | 国色天香视频完整版 | 精品一区二区三区在线成人 | 三体动漫在线观看免费完整版2022 | 精品一区久久 | 小早川怜子在线播放精品 | 成年视频在线观看 | 欧美在线视频 一区二区 | 欧美精品三区 | 日本高清二三四本2021 | 青青草原免费在线视频 | 91精品国产在线 | 青青青青在线视频 | 齐天大性之七仙女欲春迅雷链接 | jazz中国在线视频 | 高清国产在线观看 | 无人区在线观看免费完整版免费 | 99视频在线观看免费视频 | 大胆暴露亚洲美女xxxx | 欧美草逼视频 | 男人的天堂日本 | 无码人妻精品一区二区蜜桃在线看 | 国内精品久久久久影院男同志 | 日韩在线免费播放 | 国产成人激情 |