<address id="ousso"></address>
<form id="ousso"><track id="ousso"><big id="ousso"></big></track></form>
  1. 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

    <address id="ousso"></address>
    <form id="ousso"><track id="ousso"><big id="ousso"></big></track></form>
    1. 日日做夜狠狠爱欧美黑人