java實(shí)現(xiàn)簡單聊天室單人版
本文實(shí)例為大家分享了java實(shí)現(xiàn)簡單聊天室的具體代碼,供大家參考,具體內(nèi)容如下
先整理下思路:
1.創(chuàng)建一個通信服務(wù)端,傳入端口號和相關(guān)的流后等待客戶端連接,并初始化圖形界面。
2.創(chuàng)建一個JFrame,用于寫出聊天的界面,這里界面名稱由其他類傳入。
3.把客戶端創(chuàng)建的方法寫進(jìn)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 { //實(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+"說: "+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)聽寫進(jìn)此函數(shù),這個就不演示了 } }
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Java NIO實(shí)戰(zhàn)之聊天室功能詳解
- Java NIO Selector用法詳解【含多人聊天室實(shí)例】
- java編程實(shí)現(xiàn)多人聊天室功能
- java聊天室的實(shí)現(xiàn)代碼
- Java GUI編程實(shí)現(xiàn)在線聊天室
- Java編程實(shí)現(xiàn)基于TCP協(xié)議的Socket聊天室示例
- Java Socket通信之聊天室功能
- Java continue break制作簡單聊天室程序
- java利用Socket實(shí)現(xiàn)聊天室功能實(shí)例
- java基于netty NIO的簡單聊天室的實(shí)現(xiàn)
相關(guān)文章
Java實(shí)現(xiàn)動物換位游戲完整?過程詳解
大家好,今天嘗試用Java編程設(shè)計一個GUI界面的動物換位游戲,游戲的結(jié)果是讓左右兩組的動物交換位置,以下是具體設(shè)計過程,供大家參考2022-07-07controller函數(shù)中參數(shù)列表使用多個@RequestBody問題
這篇文章主要介紹了controller函數(shù)中參數(shù)列表使用多個@RequestBody問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-04-04一文帶你深入了解Java中延時任務(wù)的實(shí)現(xiàn)
延時任務(wù)相信大家都不陌生,在現(xiàn)實(shí)的業(yè)務(wù)中應(yīng)用場景可以說是比比皆是。這篇文章主要為大家介紹幾種實(shí)現(xiàn)延時任務(wù)的辦法,感興趣的可以了解一下2022-11-11mybatisplus中EntityWrapper的常用方法
這篇文章主要介紹了mybatisplus中EntityWrapper的常用方法,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-03-03Java多線程案例實(shí)戰(zhàn)之定時器的實(shí)現(xiàn)
在Java中可以使用多線程和定時器來實(shí)現(xiàn)定時任務(wù),下面這篇文章主要給大家介紹了關(guān)于Java多線程案例之定時器實(shí)現(xiàn)的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-01-01JUC循環(huán)屏障CyclicBarrier與CountDownLatch區(qū)別詳解
這篇文章主要為大家介紹了JUC循環(huán)屏障CyclicBarrier與CountDownLatch區(qū)別詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-12-12