国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發(fā) > Java > 正文

java實現(xiàn)簡單聊天室單人版

2024-07-14 08:41:45
字體:
供稿:網(wǎng)友

本文實例為大家分享了java實現(xiàn)簡單聊天室的具體代碼,供大家參考,具體內(nèi)容如下

先整理下思路: 

1.創(chuàng)建一個通信服務(wù)端,傳入端口號和相關(guān)的流后等待客戶端連接,并初始化圖形界面。 
2.創(chuàng)建一個JFrame,用于寫出聊天的界面,這里界面名稱由其他類傳入。 
3.把客戶端創(chuàng)建的方法寫進JFrame(當(dāng)然這里很粗糙的方法) 
4.設(shè)置按鈕的監(jiān)聽事件,發(fā)送消息和離線功能 

首先創(chuàng)建一個服務(wù)端的類

import java.io.IOException;import java.net.ServerSocket;import java.net.Socket;import com.jero.jframe.ChatSocketJFrame;//創(chuàng)建服務(wù)端public class ChatServerSocket{  //構(gòu)造初始化方法  public ChatServerSocket(String name,int port) throws IOException{    //創(chuàng)建Socket服務(wù)連接對象        ServerSocket serverSocket = new ServerSocket(port);    //等待客戶端連接      Socket client = serverSocket.accept();    //初始化聊天界面        try {        new ChatSocketJFrame(name,client);      } catch (Exception e) {        // TODO Auto-generated catch block        e.printStackTrace();      }    //關(guān)閉流      serverSocket.close();  }  public static void main(String[] args) throws Exception{    new ChatServerSocket("服務(wù)端",8001);//啟動服務(wù)端,指定網(wǎng)名和端口  }}
package com.jero.jframe;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.io.PrintWriter;import java.net.InetAddress;import java.net.Socket;import java.net.UnknownHostException;import javax.swing.JFrame;import javax.swing.JPanel;import javax.swing.JScrollPane;import javax.swing.border.EmptyBorder;import com.jero.socket.ChatServerSocket;import javax.swing.JTextPane;import javax.swing.JTextField;import javax.swing.JButton;import javax.swing.JTextArea;public class ChatSocketJFrame extends JFrame implements ActionListener {  private Socket socket;  private String name;  private JButton BT_SEND,BT_LEAVE,BT_LOGIN;  private JTextArea textArea;  private JPanel contentPane;  private JTextField textField;  private PrintWriter cout;  /**   * Launch the application.   * @throws Exception    * @throws IOException    * @throws UnknownHostException    */  public static void main(String[] args) throws UnknownHostException, IOException, Exception {    //實例化界面以及客戶端    new ChatSocketJFrame("客戶端","127.0.0.1",8001);  }  /**   * Create the frame.   */  public ChatSocketJFrame(String name, Socket socket)throws Exception, IOException {    //聊天室界面    super("聊天室"+name+" "+InetAddress.getLocalHost()+" "+socket.getPort());    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);    setBounds(100, 100, 733, 519);    this.textArea = new JTextArea();    this.textArea.setEditable(false);    this.getContentPane().add(new JScrollPane(this.textArea));    JPanel panel = new JPanel();    this.getContentPane().add(panel, "South");    this.textField = new JTextField(16);    panel.add(this.textField);    BT_SEND = new JButton("發(fā)送");    panel.add(BT_SEND);    BT_SEND.addActionListener(new ActionListener() {      @Override      public void actionPerformed(ActionEvent e) {        // TODO Auto-generated method stub        System.out.println("按鈕已點擊");        cout.println(name+"說: "+textField.getText()+"/n");        textArea.append("我說: "+textField.getText()+"/n");        textField.setText("");      }    });    BT_LEAVE = new JButton("離線");    panel.add(BT_LEAVE);    BT_LEAVE.addActionListener(new ActionListener() {      @Override      public void actionPerformed(ActionEvent e) {        // TODO Auto-generated method stub        textArea.append("我離線");        cout.println(name+"離線/n"+"bye");        BT_LEAVE.setEnabled(false);        BT_SEND.setEnabled(false);      }    });    this.setVisible(true);    //開始創(chuàng)建通信    this.socket = socket;    this.name = name;    //獲得Socket的輸出流并立即刷新    this.cout = new PrintWriter(socket.getOutputStream(),true);    //把網(wǎng)名傳給對方    this.cout.println(name);    //獲得Socket對象的輸入流,創(chuàng)建字符輸入流    BufferedReader buff = new BufferedReader(new InputStreamReader(socket.getInputStream()));    //接受對方的網(wǎng)名    String aline = buff.readLine();    //顯示對方發(fā)送的內(nèi)容    textArea.append("連接"+aline+"成功!!/n");    aline = buff.readLine();    //如果內(nèi)容不為空并且對方不離線,則相互傳送消息    while(aline!=null&&!aline.equals("bye")){      textArea.append(aline+"/r/n");      aline = buff.readLine();    }    //當(dāng)對方離線時,關(guān)閉所有的流    buff.close();    cout.close();    socket.close();    //把按鈕設(shè)置為不可操作    BT_SEND.setEnabled(false);    BT_LEAVE.setEnabled(false);  }  /**   * @wbp.parser.constructor   */  public ChatSocketJFrame(String name,String host,int port) throws UnknownHostException, IOException, Exception{    //創(chuàng)建客戶端    this(name,new Socket(host,port));  }  @Override  public void actionPerformed(ActionEvent e) {    // TODO Auto-generated method stub    //可以把動作監(jiān)聽寫進此函數(shù),這個就不演示了  }}

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持VeVb武林網(wǎng)。 


注:相關(guān)教程知識閱讀請移步到JAVA教程頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 高雄县| 云和县| 内丘县| 南靖县| 出国| 奉贤区| 淮安市| 忻州市| 定远县| 靖边县| 林口县| 青河县| 玉环县| 安宁市| 噶尔县| 台南县| 长沙市| 汉源县| 武平县| 土默特左旗| 晋中市| 巧家县| 苏尼特左旗| 兴义市| 大名县| 桑日县| 通河县| 天水市| 海安县| 远安县| 余庆县| 崇信县| 满城县| 厦门市| 寻乌县| 中西区| 龙井市| 石门县| 收藏| 留坝县| 彝良县|