<delect id="sj01t"></delect>
  1. <em id="sj01t"><label id="sj01t"></label></em>
  2. <div id="sj01t"></div>
    1. <em id="sj01t"></em>

            <div id="sj01t"></div>
            java語言

            如何運用Java socket實現多人聊天室功能

            時間:2025-01-14 14:49:15 java語言 我要投稿
            • 相關推薦

            如何運用Java socket實現多人聊天室功能

              導語:如何運用Java socket實現多人聊天室功能呢?下面是小編給大家提供的代碼實現,大家可以參考閱讀,更多詳情請關注應屆畢業生考試網。

              目錄結構:

              ChatClient:

              package com.panda.chat;

             

              import java.awt.*;

              import java.awt.event.*;

              import java.io.*;

              import java.net.*;

              @SuppressWarnings("serial")

              public class ChatClient extends Frame {

              private TextArea ta = new TextArea();

              private TextField tf = new TextField();

              private DataOutputStream dos = null;

              private DataInputStream dis = null;

              private Socket socket = null;

              private boolean bConnected = false;

              private Thread thread=null;

              public static void main(String[] args) {

              new ChatClient().frameClient();

              }

              public void frameClient(){

              setSize(400, 400);

              setLocation(400,300);

              add(ta,BorderLayout.NORTH);

              add(tf,BorderLayout.SOUTH);

              pack();

              tf.addActionListener(new TfListener());

              //關閉窗口事件監聽

              this.addWindowListener(new WindowAdapter() {

              @Override

              public void windowClosing(WindowEvent e) {

              disconnected();

              System.exit(0);

              }

              });

              this.connect();

              setVisible(true);

              }

              //鏈接服務器地址

              private void connect(){

              try {

              socket = new Socket("127.0.0.1", 8888);

              thread=new Thread(new ChatThread());

              thread.start();

              dos = new DataOutputStream(socket.getOutputStream());

              dis = new DataInputStream(socket.getInputStream());

              } catch (UnknownHostException e) {

              // TODO Auto-generated catch block

              e.printStackTrace();

              } catch (IOException e) {

              // TODO Auto-generated catch block

              e.printStackTrace();

              }

              }

              //斷開連接

              private void disconnected(){

              bConnected = false;

              try {

              dos.close();

              dis.close();

              socket.close();

              } catch (IOException e1) {

              // TODO Auto-generated catch block

              e1.printStackTrace();

              }

              }

              //鍵盤回車事件

              private class TfListener implements ActionListener{

              @Override

              public void actionPerformed(ActionEvent e) {

              String strMsg = tf.getText();

              tf.setText("");

              try {

              dos.writeUTF(strMsg);

              dos.flush();

              } catch (IOException e1) {

              // TODO Auto-generated catch block

              e1.printStackTrace();

              }

              }

              }

              //開啟線程接受服務器信息

              private class ChatThread implements Runnable{

              @Override

              public void run() {

              try {

              bConnected = true;

              while(bConnected){

              String msg = dis.readUTF();

              String taText = ta.getText();

              ta.setText(taText+msg+"\n");

              }

              } catch (SocketException e) {

              System.out.println("退出");;

              } catch (IOException e) {

              e.printStackTrace();

              }

              }

              }

              }

              ChatServer:

              package com.panda.chat;

              import java.io.*;

              import java.net.*;

              import java.util.*;

              public class ChatServer {

              private boolean started = false;

              private List<ChatThread> chatThreads = new ArrayList<ChatThread>();

              public static void main(String[] args) {

              new ChatServer().startServer();

              }

              private void startServer(){

              try {

              //開啟服務端Socket

              ServerSocket seso = new ServerSocket(8888);

              started = true;

              while(started){

              //接受客戶端連接請求

              Socket sos = seso.accept();

              System.out.println("一個客戶端已連接");

              //開啟線程處理客戶端通信

              ChatThread ct = new ChatThread(sos);

              chatThreads.add(ct);

              new Thread(ct).start();

              }

              } catch (IOException e) {

              e.printStackTrace();

              }

              }

              private class ChatThread implements Runnable{

              private Socket socket;

              private DataInputStream din=null;

              private DataOutputStream don=null;

              private boolean bConnected = false;

              public ChatThread(Socket socket) {

              super();

              this.socket = socket;

              }

              //發送信息的函數

              private void send(String strMsgIn){

              try{

              don.writeUTF(strMsgIn);

              don.flush();

              }catch(IOException e){

              e.printStackTrace();

              }

              }

              @Override

              public void run() {

              try{

              din = new DataInputStream(socket.getInputStream());

              don = new DataOutputStream(socket.getOutputStream());

              //讀取數據

              bConnected = true;

              while(bConnected){

              String strMsgIn = din.readUTF();

              System.out.println(strMsgIn);

              //接收到數據后發送給每個客戶端

              for(int i =0;i<chatThreads.size();i++){

              chatThreads.get(i).send(strMsgIn);

              }

              }

              }catch (IOException e) {

              try {

              //如果客戶端出錯或關閉,直接關閉連接,并移除List中的當前線程

              socket.close();

              chatThreads.remove(this);

              } catch (IOException e1) {

              // TODO Auto-generated catch block

              e1.printStackTrace();

              }

              } finally{

              try {

              din.close();

              don.close();

              socket.close();

              } catch (IOException e) {

              // TODO Auto-generated catch block

              e.printStackTrace();

              }

              }

              }

              }

              }

              運行ChatSever后,再同時打開多次ChatClient,就可以實現多人聊天了,你也試試。

            【如何運用Java socket實現多人聊天室功能】相關文章:

            Java如何通過Socket實現TCP服務端10-08

            java如何實現后臺自動發郵件功能09-17

            講解Java的Socket網絡編程的多播與廣播實現09-03

            java實現后臺自動發郵件功能08-06

            java如何實現漢諾塔08-08

            如何運用PS實現人物姿態的改變08-20

            java通用組合算法如何實現09-12

            Java中如何實現顯示動態的時間09-28

            Java網絡基礎和Socket通信基礎10-25

            <delect id="sj01t"></delect>
            1. <em id="sj01t"><label id="sj01t"></label></em>
            2. <div id="sj01t"></div>
              1. <em id="sj01t"></em>

                      <div id="sj01t"></div>
                      黄色视频在线观看