日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

Java實現簡單局域網聊天室

瀏覽:123日期:2022-08-09 16:38:25

本文實例為大家分享了Java實現簡單局域網聊天室的具體代碼,供大家參考,具體內容如下

Java 的Socket編程:

1、TCP協議是面向連接的、可靠的、有序的、以字節流的方式發送數據,通過三次握手方式建立連接,形成傳輸數據的通道,在連接中進行大量數據的傳輸,效率會稍低

2、Java中基于TCP協議實現網絡通信的類

客戶端的Socket類 服務器端的ServerSocket類

Java實現簡單局域網聊天室

3、Socket通信的步驟

① 創建ServerSocket和Socket

② 打開連接到Socket的輸入/輸出流

③ 按照協議對Socket進行讀/寫操作

④ 關閉輸入輸出流、關閉Socket

4、服務器端:

① 創建ServerSocket對象,綁定監聽端口

② 通過accept()方法監聽客戶端請求

③ 連接建立后,通過輸入流讀取客戶端發送的請求信息

④ 通過輸出流向客戶端發送鄉音信息

⑤ 關閉相關資源

5、客戶端:

① 創建Socket對象,指明需要連接的服務器的地址和端口號

② 連接建立后,通過輸出流想服務器端發送請求信息

③ 通過輸入流獲取服務器響應的信息

④ 關閉響應資源

實現的聊天室例子:

實現的效果是如下:

Java實現簡單局域網聊天室

服務端代碼:

package socket.server; import java.io.BufferedReader;import java.io.IOException;import java.io.PrintWriter;import java.net.ServerSocket;import java.net.Socket;import java.util.ArrayList; /** * @author 超 * Create by fengc on 2018/7/25 21:21 */public class Server extends Thread{ ServerUI ui; ServerSocket ss; BufferedReader reader; PrintWriter writer; public Server(ServerUI ui) {this.ui = ui;this.start(); } @Override public void run() {try { ss = new ServerSocket(8081); ui.clients=new ArrayList<>(); println('啟動服務器成功:端口8081'); while (true) {println('等待客戶端鏈接.......................................');Socket client = ss.accept();ui.clients.add(client);println('連接成功,客戶端請求服務端的詳細信息:' + client.toString());new ListenerClient(ui, client); }} catch (IOException e) { println('啟動服務器失敗:端口8081'); println(e.toString()); e.printStackTrace();} } public synchronized void sendMsg(String msg) {try { for (int i = 0; i < ui.clients.size(); i++) {Socket client = ui.clients.get(i);writer = new PrintWriter(client.getOutputStream(), true);writer.println(msg); }} catch (Exception e) { println(e.toString());} } public void println(String s) {if (s != null) { s = '服務端打印消息:' + s; this.ui.taShow.setText(this.ui.taShow.getText() + s + 'n'); System.out.println(s + 'n');} } public void closeServer() {try { if (ss != null)ss.close(); if (reader != null)reader.close(); if (writer != null)writer.close();} catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace();} } }

package socket.server; import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.PrintWriter;import java.net.Socket; /** * @author 超 * Create by fengc on 2018/7/25 21:33 * 這個類是服務器端的等待客戶端發送信息* */public class ListenerClient extends Thread{ BufferedReader reader; PrintWriter writer; ServerUI ui; Socket client; public ListenerClient(ServerUI ui, Socket client) {this.ui = ui;this.client=client;this.start(); } //為每一個客戶端創建線程等待接收信息,然后把信息廣播出去 @Override public void run() {String msg = '';while (true) { try {reader = new BufferedReader(new InputStreamReader(client.getInputStream()));writer = new PrintWriter(client.getOutputStream(), true);msg = reader.readLine();sendMsg(msg); } catch (IOException e) {println(e.toString());break; } if (msg != null && msg.trim() != '') {println('客戶端 ' + msg); }} } //把信息廣播到所有用戶 public synchronized void sendMsg(String msg) {try { for (int i = 0; i < ui.clients.size(); i++) {Socket client = ui.clients.get(i);writer = new PrintWriter(client.getOutputStream(), true);writer.println(msg); } } catch (Exception e) { println(e.toString());} } public void println(String s) {if (s != null) { this.ui.taShow.setText(this.ui.taShow.getText() + s + 'n'); System.out.println(s + 'n');} }}

package socket.server; import javax.swing.*;import java.awt.*;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;import java.net.Socket;import java.util.List; /** * @author 超 * Create by fengc on 2018/7/25 21:21 */public class ServerUI extends JFrame { public static void main(String[] args) {new ServerUI(); } public JButton btStart;//啟動服務器 public JButton btSend;//發送信息按鈕 public JTextField tfSend;//需要發送的文本信息 public JTextArea taShow;//信息展示 public Server server;//用來監聽客戶端連接 static List<Socket> clients;//保存連接到服務器的客戶端 public ServerUI() {super('服務器端');btStart = new JButton('啟動服務');btSend = new JButton('發送信息');tfSend = new JTextField(10); //裝在輸入文字taShow = new JTextArea();//點擊按鈕,所做的是事情,啟動服務器btStart.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) {server = new Server(ServerUI.this); }});//點擊發送消息按鈕btSend.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) {server.sendMsg(tfSend.getText());tfSend.setText(''); }});//初始化界面this.addWindowListener(new WindowAdapter() { //關閉按鈕點擊事件 public void windowClosing(WindowEvent e) {int a = JOptionPane.showConfirmDialog(null, '確定關閉嗎?', '溫馨提示',JOptionPane.YES_NO_OPTION);if (a == 1) { server.closeServer(); System.exit(0); // 關閉} }});//底部啟動服務按鈕與發送消息按鈕JPanel top = new JPanel(new FlowLayout());top.add(tfSend);top.add(btSend);top.add(btStart);this.add(top, BorderLayout.SOUTH);//中部顯示消息欄 信息展示final JScrollPane sp = new JScrollPane();sp.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);sp.setViewportView(this.taShow);this.taShow.setEditable(false);this.add(sp, BorderLayout.CENTER);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);this.setSize(400, 300);this.setLocation(100, 200);this.setVisible(true); } }

客戶端代碼:

package socket.clinet; import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.PrintWriter;import java.net.Socket; /** * @author 超 * Create by fengc on 2018/7/25 21:41 */public class Client extends Thread { ClientUI ui; Socket client; BufferedReader reader; PrintWriter writer; public Client(ClientUI ui) {this.ui = ui;try { String ip = ui.tfIP.getText(); //得到輸入的ip地址 int port = Integer.parseInt(ui.tfPort.getText()); //得到輸入的端口 client = new Socket(ip, port);//這里設置連接服務器端的IP的端口 println('連接服務器成功,服務器端口地址:' + port); reader = new BufferedReader(new InputStreamReader(client.getInputStream())); writer = new PrintWriter(client.getOutputStream(), true); String name = ui.tfName.getText(); if (name == null || ''.equals(name)) {name = '匿名者'; } sendMsg('會員 ' + name + ',登錄上來了........................'); // 如果為 true,則 println、printf 或 format 方法將刷新輸出緩沖區} catch (NumberFormatException nu) { println('端口請輸入正確.......'); nu.printStackTrace();} catch (IOException e) { println('連接服務器失敗:請輸入正確的IP地址與端口'); println(e.toString()); e.printStackTrace();}this.start(); } public void run() {String msg = '';while (true) { try {msg = reader.readLine(); } catch (IOException e) {println('服務器斷開連接'); break; } if (msg != null && msg.trim() != '') {println(msg); }} } public void sendMsg(String msg) {try { writer.println(msg);} catch (Exception e) { println(e.toString());} } public void println(String s) {if (s != null) { this.ui.taShow.setText(this.ui.taShow.getText() + s + 'n'); System.out.println(s + 'n');} } }

package socket.clinet; import javax.swing.*;import java.awt.*;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent; /** * @author 超 * Create by fengc on 2018/7/25 21:40 */public class ClientUI extends JFrame { public static void main(String[] args) {new ClientUI(); } public JButton btStart; public JButton btSend; public JTextField tfSend; //裝在輸入文字 public JTextPane nameText; //輸入名字 public JTextPane ipTex; //輸入名字 public JTextPane portText; //輸入名字 public JTextField tfName; //服務器ip public JTextField tfIP; //服務器ip public JTextField tfPort; //服務器端口 public JTextArea taShow; public Client server; public ClientUI() {super('客戶端');btStart = new JButton('啟動連接');btSend = new JButton('發送信息');tfSend = new JTextField(20);tfIP = new JTextField(8);tfPort = new JTextField(3);tfName = new JTextField(6);nameText = new JTextPane();nameText.setText('登錄名');nameText.setEditable(false);ipTex = new JTextPane();ipTex.setText('服務地址');ipTex.setEditable(false);portText = new JTextPane();portText.setText('服務端口');portText.setEditable(false);taShow = new JTextArea();//啟動鏈接按鈕事件btStart.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) {server = new Client(ClientUI.this); }});//發送按鈕事件btSend.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) {String name = tfName.getText();if (name == null || ''.equals(name)) { name = '匿名者';}server.sendMsg(name + ':' + tfSend.getText());tfSend.setText(''); }}); this.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) {int a = JOptionPane.showConfirmDialog(null, '確定關閉嗎?', '溫馨提示',JOptionPane.YES_NO_OPTION);if (a == 1) { System.exit(0); // 關閉} }});//底部的發送信息框與鏈接按鈕JPanel top = new JPanel(new FlowLayout());top.add(tfSend); //發送文本top.add(btSend); //發送按鈕this.add(top, BorderLayout.SOUTH); //加載到底部 //頭部放連接服務的JPanel northJpannel = new JPanel(new FlowLayout());northJpannel.add(nameText);northJpannel.add(tfName);northJpannel.add(ipTex);northJpannel.add(tfIP);northJpannel.add(portText);northJpannel.add(tfPort);northJpannel.add(btStart);this.add(northJpannel,BorderLayout.NORTH); //加載到頭部 final JScrollPane sp = new JScrollPane();sp.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);sp.setViewportView(this.taShow);this.taShow.setEditable(false);this.add(sp, BorderLayout.CENTER);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);this.setSize(500, 400);this.setLocation(600, 200);this.setVisible(true); } }

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網。

標簽: Java
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
日韩亚洲精品在线观看| 欧美aa在线观看| 国产精品三上| 蜜桃tv一区二区三区| 久久视频精品| 国产综合精品一区| 夜久久久久久| 欧美日韩国产高清电影| 亚洲精品一区二区妖精| 黄色国产精品| 中文不卡在线| 日韩精品一区二区三区av | 免费视频亚洲| 国产在线不卡| 久久xxxx精品视频| 石原莉奈在线亚洲二区| 中文一区一区三区免费在线观 | 免费在线成人| 欧美丰满日韩| 精品丝袜在线| 在线观看免费一区二区| 亚洲无线观看| 国产精品一区二区三区av| 麻豆高清免费国产一区| 欧美13videosex性极品| 国产字幕视频一区二区| 中文字幕乱码亚洲无线精品一区| 欧美一级二区| 精品免费av一区二区三区| a国产在线视频| 亚洲一级高清| 亚洲精品一级| 国产日韩欧美一区二区三区在线观看| 国产精品啊啊啊| 精品国产精品久久一区免费式| 九九精品调教| 亚洲精品日本| 美女视频黄 久久| 久久久久国产| 在线精品观看| 国产在线视频欧美一区| 亚洲成人三区| 欧美久久一区二区三区| 9999国产精品| 久久亚洲欧美| 国产精品宾馆| 蜜臀久久99精品久久一区二区| 久久亚洲色图| 国产一区二区三区成人欧美日韩在线观看 | 亚洲一区二区三区高清| 久久狠狠亚洲综合| 成人免费电影网址| 日韩va亚洲va欧美va久久| jizzjizz中国精品麻豆| 水蜜桃久久夜色精品一区的特点 | 久久精品女人| 国产精品外国| 成人午夜网址| 快she精品国产999| 久久免费精品| 亚洲在线成人| 日本一二区不卡| 最近国产精品视频| 综合日韩av| 奇米狠狠一区二区三区| 91亚洲一区| 亚洲精品少妇| 久久伦理在线| 国产一区日韩| 午夜性色一区二区三区免费视频| 日本久久精品| 91成人精品在线| 亚洲一级网站| 国产精品任我爽爆在线播放| 香蕉人人精品| 高清一区二区三区| 亚洲精品护士| 欧美日韩国产一区二区三区不卡| 欧美成人精品一级| 亚洲人www| 亚洲欧美日韩高清在线| 97在线精品| 国产精品www994| 天堂av在线一区| 日韩精品麻豆| 国产不卡av一区二区| 日韩精品一区二区三区免费视频| 黄色免费成人| 日本久久精品| 国产欧美三级| 日韩中文欧美在线| 99久久99久久精品国产片果冰 | 精品国产精品国产偷麻豆 | 天堂俺去俺来也www久久婷婷| 91精品一区二区三区综合在线爱 | 久久国产日韩欧美精品| 噜噜噜躁狠狠躁狠狠精品视频| 三上悠亚国产精品一区二区三区| 麻豆国产精品| 欧美日本不卡| 亚洲精品日本| 美国三级日本三级久久99 | 日本在线成人| 一区二区高清| 日韩专区在线视频| 国产精品呻吟| 欧美91视频| 久久夜夜操妹子| 日韩一区二区三区在线免费观看| 久久不见久久见国语| 国产视频一区二| 日本视频中文字幕一区二区三区| 亚洲精品系列| 日韩三级视频| 天堂精品久久久久| 亚洲日韩视频| 亚洲毛片视频| 亚欧洲精品视频在线观看| 亚洲最新av| 亚洲深深色噜噜狠狠爱网站| 天堂成人国产精品一区| 午夜av一区| 国产一级一区二区| 亚洲深夜av| 亚洲一区二区三区高清| 亚洲免费婷婷| 久久亚洲风情| 午夜电影一区| 日韩精品第二页| 欧美一区自拍| 国产精品日本一区二区三区在线 | 色综合视频一区二区三区日韩 | 日韩精品免费一区二区三区| 欧美片第1页| 精精国产xxxx视频在线野外| 99视频精品全部免费在线视频| 国产网站在线| 久久精品官网| 午夜一级在线看亚洲| 欧美专区18| 日韩精品欧美精品| 国产精品115| 精品国产亚洲一区二区三区在线 | 日韩精选在线| 国产福利一区二区精品秒拍| 精品免费av| 日韩成人亚洲| 黄色亚洲免费| 亚洲精品乱码久久久久久蜜桃麻豆| 日韩精品欧美精品| 欧美国产中文高清| 日韩成人精品一区二区| 99免费精品| 久久国产成人| 欧美日韩精品一区二区三区视频 | 日本va欧美va瓶| 麻豆精品视频在线观看免费| 日韩av福利| 亚洲欧美久久久| 国产欧美丝祙| 日韩高清成人| 一区二区三区四区日韩| 麻豆精品视频在线| 欧美精品一卡| 91九色综合| 久久免费精品| 好吊一区二区三区| 青草综合视频| 日韩高清欧美| 亚洲精品1区2区| 国产亚洲高清在线观看| 97精品一区二区| 蜜桃av一区二区三区电影| 国产精品激情| 精品一区毛片| 欧美精品中文| 激情五月综合| 久久国产精品免费一区二区三区| 久久影院午夜精品| 六月天综合网| 国产福利亚洲| 欧美另类综合| 国产精品v日韩精品v欧美精品网站| 久久亚洲成人| 日韩欧美三区| 日韩欧美网址| 日韩不卡在线观看日韩不卡视频| 午夜久久中文| 最新亚洲国产| 另类中文字幕国产精品| 欧美三区不卡| 91国语精品自产拍| 精品一区二区三区中文字幕| 香蕉久久国产| 国产黄大片在线观看| 亚洲一区二区免费在线观看| 亚洲一区资源| 欧美在线观看天堂一区二区三区| 亚洲韩日在线| 精品久久久久久久|