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

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

Java實(shí)現(xiàn)簡(jiǎn)單局域網(wǎng)聊天室

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

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

Java 的Socket編程:

1、TCP協(xié)議是面向連接的、可靠的、有序的、以字節(jié)流的方式發(fā)送數(shù)據(jù),通過(guò)三次握手方式建立連接,形成傳輸數(shù)據(jù)的通道,在連接中進(jìn)行大量數(shù)據(jù)的傳輸,效率會(huì)稍低

2、Java中基于TCP協(xié)議實(shí)現(xiàn)網(wǎng)絡(luò)通信的類

客戶端的Socket類 服務(wù)器端的ServerSocket類

Java實(shí)現(xiàn)簡(jiǎn)單局域網(wǎng)聊天室

3、Socket通信的步驟

① 創(chuàng)建ServerSocket和Socket

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

③ 按照協(xié)議對(duì)Socket進(jìn)行讀/寫操作

④ 關(guān)閉輸入輸出流、關(guān)閉Socket

4、服務(wù)器端:

① 創(chuàng)建ServerSocket對(duì)象,綁定監(jiān)聽端口

② 通過(guò)accept()方法監(jiān)聽客戶端請(qǐng)求

③ 連接建立后,通過(guò)輸入流讀取客戶端發(fā)送的請(qǐng)求信息

④ 通過(guò)輸出流向客戶端發(fā)送鄉(xiāng)音信息

⑤ 關(guān)閉相關(guān)資源

5、客戶端:

① 創(chuàng)建Socket對(duì)象,指明需要連接的服務(wù)器的地址和端口號(hào)

② 連接建立后,通過(guò)輸出流想服務(wù)器端發(fā)送請(qǐng)求信息

③ 通過(guò)輸入流獲取服務(wù)器響應(yīng)的信息

④ 關(guān)閉響應(yīng)資源

實(shí)現(xiàn)的聊天室例子:

實(shí)現(xiàn)的效果是如下:

Java實(shí)現(xiàn)簡(jiǎn)單局域網(wǎng)聊天室

服務(wù)端代碼:

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('啟動(dòng)服務(wù)器成功:端口8081'); while (true) {println('等待客戶端鏈接.......................................');Socket client = ss.accept();ui.clients.add(client);println('連接成功,客戶端請(qǐng)求服務(wù)端的詳細(xì)信息:' + client.toString());new ListenerClient(ui, client); }} catch (IOException e) { println('啟動(dòng)服務(wù)器失敗:端口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 = '服務(wù)端打印消息:' + 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 * 這個(gè)類是服務(wù)器端的等待客戶端發(fā)送信息* */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(); } //為每一個(gè)客戶端創(chuàng)建線程等待接收信息,然后把信息廣播出去 @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;//啟動(dòng)服務(wù)器 public JButton btSend;//發(fā)送信息按鈕 public JTextField tfSend;//需要發(fā)送的文本信息 public JTextArea taShow;//信息展示 public Server server;//用來(lái)監(jiān)聽客戶端連接 static List<Socket> clients;//保存連接到服務(wù)器的客戶端 public ServerUI() {super('服務(wù)器端');btStart = new JButton('啟動(dòng)服務(wù)');btSend = new JButton('發(fā)送信息');tfSend = new JTextField(10); //裝在輸入文字taShow = new JTextArea();//點(diǎn)擊按鈕,所做的是事情,啟動(dòng)服務(wù)器btStart.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) {server = new Server(ServerUI.this); }});//點(diǎn)擊發(fā)送消息按鈕btSend.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) {server.sendMsg(tfSend.getText());tfSend.setText(''); }});//初始化界面this.addWindowListener(new WindowAdapter() { //關(guān)閉按鈕點(diǎn)擊事件 public void windowClosing(WindowEvent e) {int a = JOptionPane.showConfirmDialog(null, '確定關(guān)閉嗎?', '溫馨提示',JOptionPane.YES_NO_OPTION);if (a == 1) { server.closeServer(); System.exit(0); // 關(guān)閉} }});//底部啟動(dòng)服務(wù)按鈕與發(fā)送消息按鈕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);//這里設(shè)置連接服務(wù)器端的IP的端口 println('連接服務(wù)器成功,服務(wù)器端口地址:' + 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('會(huì)員 ' + name + ',登錄上來(lái)了........................'); // 如果為 true,則 println、printf 或 format 方法將刷新輸出緩沖區(qū)} catch (NumberFormatException nu) { println('端口請(qǐng)輸入正確.......'); nu.printStackTrace();} catch (IOException e) { println('連接服務(wù)器失敗:請(qǐng)輸入正確的IP地址與端口'); println(e.toString()); e.printStackTrace();}this.start(); } public void run() {String msg = '';while (true) { try {msg = reader.readLine(); } catch (IOException e) {println('服務(wù)器斷開連接'); 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; //服務(wù)器ip public JTextField tfIP; //服務(wù)器ip public JTextField tfPort; //服務(wù)器端口 public JTextArea taShow; public Client server; public ClientUI() {super('客戶端');btStart = new JButton('啟動(dòng)連接');btSend = new JButton('發(fā)送信息');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('服務(wù)地址');ipTex.setEditable(false);portText = new JTextPane();portText.setText('服務(wù)端口');portText.setEditable(false);taShow = new JTextArea();//啟動(dòng)鏈接按鈕事件btStart.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) {server = new Client(ClientUI.this); }});//發(fā)送按鈕事件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, '確定關(guān)閉嗎?', '溫馨提示',JOptionPane.YES_NO_OPTION);if (a == 1) { System.exit(0); // 關(guān)閉} }});//底部的發(fā)送信息框與鏈接按鈕JPanel top = new JPanel(new FlowLayout());top.add(tfSend); //發(fā)送文本top.add(btSend); //發(fā)送按鈕this.add(top, BorderLayout.SOUTH); //加載到底部 //頭部放連接服務(wù)的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); } }

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

標(biāo)簽: Java
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
亚洲精品系列| 国产网站在线| 美女福利一区二区三区| 国产精品xxx| 国产精品第一| 日韩av中文字幕一区| 欧美成人精品一级| 91tv亚洲精品香蕉国产一区| 91精品电影| 婷婷激情综合| 久久国产成人午夜av影院宅| 日本国产亚洲| a国产在线视频| 国产一区二区三区四区| 免费久久精品| 亚洲激情偷拍| 久久精品一本| 日韩一级精品| 国产精品流白浆在线观看| 亚洲精品激情| 欧美日韩一区自拍| 蜜臀久久99精品久久一区二区| 久久婷婷丁香| 伊人久久婷婷| 日本不卡高清视频| 欧美国产不卡| 亚洲va中文在线播放免费| 亚洲午夜精品久久久久久app| 国产精品一在线观看| 欧洲一级精品| 激情久久五月| 免费国产亚洲视频| 蜜臀久久精品| 久久久久午夜电影| 午夜一级久久| 亚洲成人不卡| 亚洲专区欧美专区| 国产精品成人**免费视频| 人在线成免费视频| 99热免费精品| 青青伊人久久| 色婷婷精品视频| 在线观看亚洲精品福利片| 日韩中文视频| 99在线|亚洲一区二区| 久久国产欧美日韩精品| 亚洲va中文在线播放免费| 男女性色大片免费观看一区二区| 日韩国产精品久久久久久亚洲| 精品少妇av| 欧美中文字幕| 97精品国产福利一区二区三区| 午夜精品婷婷| 欧美国产中文高清| 好看的av在线不卡观看| 欧美一级全黄| 亚洲高清二区| 国产精品一线| 亚洲一区网站| 日本久久综合| 精品国产一级| 午夜精品免费| 久久久久九九精品影院| 中文久久精品| 美女国产一区二区三区| 女人av一区| 欧美日韩va| 国产精品日韩久久久| 国内揄拍国内精品久久| 亚洲图片久久| 欧美性感美女一区二区| 麻豆精品少妇| 日本在线视频一区二区| 欧美中文一区二区| 精品伊人久久久| 中文字幕日韩欧美精品高清在线| 狠狠躁少妇一区二区三区| 日本久久一区| 亚洲成人不卡| 麻豆精品在线观看| 日韩福利在线观看| 亚洲免费婷婷| 一区二区三区四区在线看| 精品一区91| 欧美三级第一页| 狠狠爱www人成狠狠爱综合网| 国产一区二区三区不卡视频网站 | 日韩高清成人| 国产精品免费大片| 美女网站久久| 欧美日韩国产欧| 日韩精品电影| 精品日本视频| 青青青国产精品| 中文字幕日本一区| 欧美日韩免费观看一区=区三区| 日韩一区自拍| 日韩成人a**站| 久久男人av| 免费视频一区二区三区在线观看| 日韩中文字幕| 久久亚洲色图| 亚洲欧美日韩视频二区| 日韩成人亚洲| 久久精品毛片| 精品三区视频| 久久超级碰碰| 国产欧美日韩影院| 日韩av黄色在线| 日韩欧美中文字幕电影| 日韩手机在线| 日本亚洲三级在线| 亚洲欧洲av| 日本一区二区三区视频在线看| 日韩制服丝袜av| 国产亚洲永久域名| 亚洲欧美日韩国产综合精品二区| 影音先锋国产精品| 免费久久99精品国产自在现线| 亚洲欧洲一区二区天堂久久| 亚洲精品一区二区在线看| 一区福利视频| 免费日韩av片| 视频一区日韩精品| 日韩不卡一二三区| 国产欧美69| 老司机精品视频在线播放| 麻豆精品视频在线观看| 风间由美中文字幕在线看视频国产欧美 | 都市激情国产精品| 岛国精品一区| 欧美国产小视频| 人人草在线视频| 99久久亚洲精品蜜臀| 亚洲欧美一区在线| 亚洲欧美视频一区二区三区| 亚洲日本国产| 国产欧美自拍| 国模大尺度视频一区二区| 亚洲综合在线电影| 精品在线91| 中文字幕日本一区二区| 欧美亚洲二区| 97精品国产| 午夜欧美理论片| 午夜电影一区| 欧美精品不卡| 伊人网在线播放| 成人av二区| 日本亚洲欧美天堂免费| 久久精品亚洲一区二区| av高清一区| 欧美中文日韩| 国产精品中文字幕制服诱惑| 中文av在线全新| 鲁大师成人一区二区三区| 国产日韩高清一区二区三区在线| 国内精品亚洲| 中文在线一区| 国产欧美日韩精品一区二区三区| 成人一区不卡| 久久最新视频| 国产精品1区| 另类中文字幕国产精品| 久久亚洲欧洲| 美女在线视频一区| 欧美成人精品| 欧美一级网址| 欧美三级精品| 日韩有吗在线观看| 岛国av在线播放| 综合激情一区| 超碰99在线| 综合激情网站| 欧美国产美女| 视频一区在线播放| 麻豆久久久久久久| 亚洲大全视频| 国产调教精品| 91精品国产福利在线观看麻豆| 中文在线日韩| av资源中文在线天堂| 亚洲综合专区| 日韩国产欧美一区二区| 亚洲免费福利一区| 国产传媒在线| 天堂va在线高清一区| 韩国三级一区| 欧美亚洲三级| 欧美1级日本1级| 麻豆传媒一区二区三区| 亚洲一区国产| 国产在线观看www| 日韩在线视频一区二区三区| 日本久久成人网| 国产精品亚洲一区二区在线观看| 欧美成人久久| 国产一区2区在线观看| 日韩欧美2区| 91九色精品|