中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么在Java中利用TCP協議實現一個Socket聊天室

發布時間:2021-04-15 17:44:54 來源:億速云 閱讀:136 作者:Leah 欄目:編程語言

這篇文章給大家介紹怎么在Java中利用TCP協議實現一個Socket聊天室,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

Server服務器端:

package com.han;
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.*;
import java.net.*;
import javax.swing.JDialog;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
/**
 * 本程序實現了一個TCP程序的服務器編程部分。
 * 使用Socket套接字進行編程,完成的是基于TCP可靠服務實現與客戶端的雙通信。
 * 客戶端的編程見本包中的類Client
 * @author HAN
 *
 */
@SuppressWarnings("serial")
public class Server extends JDialog{
  private BufferedReader reader;
  private PrintWriter writer;
  private ServerSocket server;
  private Socket socket;
  private JTextArea ta=new JTextArea();
  private JScrollPane sp=new JScrollPane(ta);
  private JTextField tf=new JTextField();
  Container cc;
  public Server(String title) {
    setTitle(title);
    addWindowListener(new WindowAdapter() {
      public void windowClosing (WindowEvent we) {
        dispose(); //撤銷dialog一切相關資源
        System.exit(0); //正常退出程序
      }
    });
    cc=getContentPane();
    setLayout(null);
    ta.setLineWrap(true);
    ta.setEditable(false);
    sp.setBounds(0,0,300,342);
    tf.setBounds(0,342,300,25);
    cc.add(sp);
    cc.add(tf);
    tf.addActionListener(new ActionListener(){
      public void actionPerformed(ActionEvent e){
        try {
          writer=new PrintWriter(socket.getOutputStream(),true);
        } catch (IOException e1) {
          // TODO Auto-generated catch block
          e1.printStackTrace();
        }
        writer.println(tf.getText());
        ta.append("User1:"+tf.getText()+'\n');
        tf.setText("");
      }
    });
  }
  void getserver(){
    try{
      server=new ServerSocket(8998);
      ta.append("服務器套接字已經創建成功\n");
      while(true){
        ta.append("等待客戶機的連接\n");
        socket=server.accept();
        ta.append("客戶機已連接\n");
        reader=new BufferedReader(new InputStreamReader(socket.getInputStream()));
        getClientMessage();
      }
    }catch(Exception e){
      e.printStackTrace();
    }
  }
  private void getClientMessage(){
    try {
      while(true){
        String news=reader.readLine();
        if(news!=null){
          ta.append("User2:"+news+"\n");
        }else{
          ta.append("User2(客戶端) 已斷開鏈接\n");
          break;
        }
      }
    } catch (IOException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }
    try{
      if(reader!=null){
        reader.close();
      }
    } catch (IOException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }
    if(socket!=null){
      try {
        socket.close();
      } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
      }
    }
  }
  public static void main(String[] args) {
    Server user1=new Server("User1");
    user1.setBounds(0,0,300,400);
    user1.setResizable(false);
    user1.setVisible(true);
    user1.getserver();
  }
}

Client客戶端:

package com.han;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.net.*;
import javax.swing.*;
/**
 * 本程序實現了一個TCP程序的客戶端編程部分。
 * 使用Socket套接字進行編程,完成的是基于TCP可靠服務實現與服務器的雙通信。
 * 服務器的編程見本包中的類Server
 * 可以在不同的平臺與不同的機器上運行,只是要把代碼中寫的IP地址修改為運行服務器程序Server的機器的IP地址。
 * @author HAN
 *
 */
@SuppressWarnings("serial")
public class Client extends JDialog{
  private BufferedReader reader;
  private PrintWriter writer;
  private Socket socket;
  private JTextArea ta=new JTextArea();
  private JScrollPane sp=new JScrollPane(ta);
  private JTextField tf=new JTextField();
  Container cc;
  public Client(String title) {
    setTitle(title);
    addWindowListener(new WindowAdapter() {
      public void windowClosing (WindowEvent we) {
        dispose(); //撤銷dialog一切相關資源
        System.exit(0); //正常退出程序
      }
    });
    cc=getContentPane();
    setLayout(null);
    ta.setLineWrap(true);
    ta.setEditable(false);
    sp.setBounds(0,0,300,342);
    tf.setBounds(0,342,300,25);
    cc.add(sp);
    cc.add(tf);
    tf.addActionListener(new ActionListener(){
      public void actionPerformed(ActionEvent e){
        writer.println(tf.getText());
        ta.append("User2:"+tf.getText()+'\n');
        tf.setText("");
      }
    });
  }
  private void connect(){
    ta.append("嘗試連接\n");
    try {
      socket=new Socket("192.168.1.3",8998);
    } catch (UnknownHostException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    } catch (IOException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }
    try {
      writer=new PrintWriter(socket.getOutputStream(),true);
    } catch (IOException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }
    ta.append("完成連接\n");
  }
  private void getClientMessage(){
    try {
      reader=new BufferedReader(new InputStreamReader(socket.getInputStream()));
      while(true){
        String news=reader.readLine();
        if(news!=null){
          ta.append("User1:"+news+"\n");
        }else{
          ta.append("User1(服務器) 已斷開鏈接,等待服務器重連之時,重啟User2(客戶端)進行通信\n");
          break;
        }
      }
    } catch (IOException e) {
      // TODO Auto-generated catch block
      ta.append("User1(服務器) 已斷開鏈接,等待服務器重連之時,重啟User2(客戶端)進行通信\n");
      e.printStackTrace();
    }
    try{
      if(reader!=null){
        reader.close();
      }
    } catch (IOException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }
    if(socket!=null){
      try {
        socket.close();
      } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
      }
    }
  }
  public static void main(String[] args) {
    Client user2=new Client("User2");
    user2.setBounds(0,0,300,400);
    user2.setVisible(true);
    user2.setResizable(false);
    user2.connect();
    user2.getClientMessage();
  }
}

關于怎么在Java中利用TCP協議實現一個Socket聊天室就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

永丰县| 英山县| 旬阳县| 河东区| 东宁县| 普洱| 永春县| 中卫市| 辽源市| 乡城县| 健康| 南城县| 百色市| 太白县| 宜兰市| 垣曲县| 洪泽县| 连城县| 仪征市| 汪清县| 绥化市| 天长市| 鸡西市| 宝清县| 洛浦县| 丽江市| 永丰县| 吉木乃县| 察隅县| 无棣县| 卢龙县| 麻阳| 颍上县| 庆阳市| 临猗县| 黄梅县| 井陉县| 北票市| 章丘市| 泾阳县| 托克逊县|