最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java實(shí)現(xiàn)簡(jiǎn)單聊天室單人版

 更新時(shí)間:2018年07月23日 11:06:49   作者:JEROCHAN  
這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)簡(jiǎn)單聊天室的單人版,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

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

先整理下思路:

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

首先創(chuàng)建一個(gè)服務(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ù)連接對(duì)象  
      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);//啟動(dòng)服務(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 {
    //實(shí)例化界面以及客戶端
    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("按鈕已點(diǎn)擊");
        cout.println(name+"說(shuō): "+textField.getText()+"\n");
        textArea.append("我說(shuō): "+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);
    //開(kāi)始創(chuàng)建通信
    this.socket = socket;
    this.name = name;
    //獲得Socket的輸出流并立即刷新
    this.cout = new PrintWriter(socket.getOutputStream(),true);
    //把網(wǎng)名傳給對(duì)方
    this.cout.println(name);
    //獲得Socket對(duì)象的輸入流,創(chuàng)建字符輸入流
    BufferedReader buff = new BufferedReader(new InputStreamReader(socket.getInputStream()));
    //接受對(duì)方的網(wǎng)名
    String aline = buff.readLine();
    //顯示對(duì)方發(fā)送的內(nèi)容
    textArea.append("連接"+aline+"成功?。n");
    aline = buff.readLine();
    //如果內(nèi)容不為空并且對(duì)方不離線,則相互傳送消息
    while(aline!=null&&!aline.equals("bye")){

      textArea.append(aline+"\r\n");
      aline = buff.readLine();
    }
    //當(dāng)對(duì)方離線時(shí),關(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
    //可以把動(dòng)作監(jiān)聽(tīng)寫(xiě)進(jìn)此函數(shù),這個(gè)就不演示了
  }
}

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。 

相關(guān)文章

  • Spring中的FactoryBean與BeanFactory詳細(xì)解析

    Spring中的FactoryBean與BeanFactory詳細(xì)解析

    這篇文章主要介紹了Spring中的FactoryBean與BeanFactory詳細(xì)解析,在Spring框架中,FactoryBean和BeanFactory是兩個(gè)關(guān)鍵的接口,用于創(chuàng)建和管理對(duì)象實(shí)例,它們?cè)赟pring的IoC(Inversion of Control,控制反轉(zhuǎn))容器中發(fā)揮著重要的作用,需要的朋友可以參考下
    2023-11-11
  • 了解java Struts攔截器的相關(guān)操作

    了解java Struts攔截器的相關(guān)操作

    Struts為我們實(shí)現(xiàn)了很多的功能,比如數(shù)據(jù)自動(dòng)封裝,文件上傳功能阿。Struts為我們提供的這些功能都是通過(guò)攔截器完成的。下面我們來(lái)詳細(xì)了解一下吧
    2019-06-06
  • Java?PTA?計(jì)算3到7位?水仙花數(shù)實(shí)例

    Java?PTA?計(jì)算3到7位?水仙花數(shù)實(shí)例

    這篇文章主要介紹了Java?PTA?計(jì)算3到7位?水仙花數(shù)實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • servlet之session工作原理簡(jiǎn)介_(kāi)動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    servlet之session工作原理簡(jiǎn)介_(kāi)動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    這篇文章主要介紹了servlet之session工作原理簡(jiǎn)介,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-07-07
  • Java編寫(xiě)中容易搞錯(cuò)的一些東西

    Java編寫(xiě)中容易搞錯(cuò)的一些東西

    Java編寫(xiě)中容易搞錯(cuò)的一些東西...
    2006-12-12
  • Java編程獲取文本框的內(nèi)容實(shí)例解析

    Java編程獲取文本框的內(nèi)容實(shí)例解析

    這篇文章主要介紹了Java編程獲取文本框的值實(shí)例解析,將輸入的值保存在一個(gè)指定的 txt文件之中,具有一定的參考價(jià)值,需要的朋友可以了解。
    2017-09-09
  • Java中的ThreadLocal線程變量詳解

    Java中的ThreadLocal線程變量詳解

    這篇文章主要介紹了Java中的ThreadLocal線程變量詳解,ThreadLocal叫做線程變量,意思是在ThreadLocal中填充的變量屬于當(dāng)前線程,該變量對(duì)其他線程而言是隔離的,它是用來(lái)提供線程內(nèi)部的局部變量,需要的朋友可以參考下
    2024-01-01
  • Redis中高并發(fā)讀寫(xiě)性能的深度解析與優(yōu)化

    Redis中高并發(fā)讀寫(xiě)性能的深度解析與優(yōu)化

    Redis 作為一款高性能的內(nèi)存數(shù)據(jù)庫(kù),廣泛應(yīng)用于緩存、消息隊(duì)列、實(shí)時(shí)統(tǒng)計(jì)等場(chǎng)景,本文將深入探討 Redis 的讀寫(xiě)并發(fā)能力,感興趣的小伙伴可以了解下
    2025-03-03
  • spring boot task實(shí)現(xiàn)動(dòng)態(tài)創(chuàng)建定時(shí)任務(wù)的方法

    spring boot task實(shí)現(xiàn)動(dòng)態(tài)創(chuàng)建定時(shí)任務(wù)的方法

    這篇文章主要介紹了spring boot task實(shí)現(xiàn)動(dòng)態(tài)創(chuàng)建定時(shí)任務(wù),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2019-01-01
  • 基于SpringBoot實(shí)現(xiàn)IP黑白名單的詳細(xì)步驟

    基于SpringBoot實(shí)現(xiàn)IP黑白名單的詳細(xì)步驟

    IP黑白名單是網(wǎng)絡(luò)安全管理中常見(jiàn)的策略工具,用于控制網(wǎng)絡(luò)訪問(wèn)權(quán)限,根據(jù)業(yè)務(wù)場(chǎng)景的不同,其應(yīng)用范圍廣泛,比如比較容易被盜刷的短信接口、文件接口,都需要添加IP黑白名單加以限制,所以本文給大家介紹了基于SpringBoot實(shí)現(xiàn)IP黑白名單的詳細(xì)步驟,需要的朋友可以參考下
    2024-01-01

最新評(píng)論

莲花县| 五原县| 石屏县| 铅山县| 囊谦县| 乌鲁木齐县| 通许县| 全南县| 霍邱县| 高平市| 通州市| 囊谦县| 南漳县| 阿拉善盟| 永年县| 天全县| 南丹县| 洪泽县| 昂仁县| 吉安县| 高陵县| 松阳县| 甘孜| 东阿县| 阳曲县| 茶陵县| 时尚| 唐河县| 通渭县| 修武县| 普格县| 无极县| 靖江市| 安乡县| 健康| 锦州市| 兴山县| 天等县| 班戈县| 临夏市| 峨山|