5.14學習總結

java聊天室項目

分片上傳

將大文件切分為多個小的數據塊(通常大小為1MB~10MB),然后將這些小數據塊分別上傳至服務器,最后由服務器將這些小塊組合成完整的文件。這種方式可以避免由于網絡中斷或超時而導致上傳失敗,并且能夠更好地控制上傳進度。

  • 客戶端將文件切成固定大小的塊(例如每個塊的大小為1MB),并為每個塊生成唯一的標識符。
  • 客戶端逐個上傳每個塊到服務器。上傳時,客戶端將塊的標識符和塊數據一起發送給服務器。
  • 服務器接收到每個塊后,會將塊數據存儲到臨時文件中,并在服務器端記錄每個塊的標識符和位置。
  • 當所有塊都上傳完成后,客戶端向服務器發送一個“合并請求”,請求服務器將所有塊合并成一個完整的文件。
  • 服務器接收到“合并請求”后,根據之前記錄的塊標識符和位置信息,將所有塊合并成一個完整的文件。
  • 服務器將合并后的文件存儲到指定的位置,并返回上傳成功的響應給客戶端。
  • 客戶端收到上傳成功的響應后,通知用戶上傳已完成。

?

?

private static void sendFile(File file, String filename, File selectedFile) throws IOException {LocalDateTime currentDateTime = LocalDateTime.now();DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");String formattedDateTime = currentDateTime.format(formatter); // 格式化當前日期和時間int length = 1024 * 1024 * 5;byte[] bytes = new byte[length];int number = (int) Math.ceil((double) selectedFile.length() / length);FileInputStream fileInputStream = new FileInputStream(selectedFile.getPath());message tomessage = new message(messagetype, user, markTool.filemessage, filename, formattedDateTime, chatgroup, otheruser);connection.oos.writeObject(tomessage);for (int i = 0; i < number; i++) {byte[] buffer = new byte[length];int bytesRead = fileInputStream.read(buffer);message filemessage = new message(buffer, true);connection.oos1.writeObject(filemessage);}byte[] buffer = new byte[length];int bytesRead = fileInputStream.read(buffer);message filemessage = new message(buffer, false);connection.oos1.writeObject(filemessage);System.out.println("文件發送完成,共發送了 " + number + " 個文件塊。");}

文本,文件操作

服務端包括監聽線程和處理收發信線程:

  • 創建監聽線程,監聽客戶端的連接。將每個連接的客戶端加入維護的列表,并為每個連接的客戶端開啟一個處理收發信的線程。
  • 在每個客戶端的收發信線程中,接收每個客戶端發回的消息,并對其進行轉發到相應接收的客戶端上,以此實現多人聊天室。
  • 添加處理傳輸文件的判斷,通過在傳輸的字節數組中添加標志位來區分傳輸的是文本消息,還是文件。

客戶端包括發送消息線程和接收消息線程:

  • 發送消息線程,用來處理用戶的輸入信息,判斷輸入的是文本信息還是文件,并修改傳輸的字節數組標志位進行區分。最后將信息傳輸給服務器。
  • 接收消息線程,用來處理服務器發回的信息,根據標志位判斷輸入的是文本信息還是文件,并做相應處理。如果是文本信息,則顯示在控制臺,如果是文件,則保存在指定目錄下。

?

?

發送文件(文件選擇器)

//發送圖片點擊事件FileChooser fileChooser = new FileChooser();fileChooser.setTitle("選擇文件");// 添加文件過濾器,僅允許選擇圖片文件fileChooser.getExtensionFilters().addAll(new FileChooser.ExtensionFilter("圖片文件", "*.png", "*.jpg", "*.gif"));// 顯示文件選擇對話框并獲取用戶選擇的文件Window stage = null;File selectedFile = fileChooser.showOpenDialog(stage);// 如果用戶選擇了文件,則將文件加載到ImageView中顯示

將傳輸的字節數組寫入文件

private static void sendFile(message getmessage,String path) throws IOException, ClassNotFoundException {System.out.println(path);File file = new File(path);FileOutputStream fos = new FileOutputStream(file);while (true) {message message = (message) connection.ois1.readObject();System.out.println(message.Filebytes);System.out.println(message.flag);if (!message.flag) {fos.write(message.Filebytes);fos.flush();break;}fos.write(message.Filebytes);fos.flush();}fos.close();}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/12800.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/12800.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/12800.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【PMP練習題】

PMP練習題 PMP練習題 PMP練習題 2、 [單選] 由于缺乏資金&#xff0c;一個項目在啟動階段被終止&#xff0c;項目經理必須對項目收尾。項目經理首先應該做什么&#xff1f; Due to lack of funding, a project is terminated during its initiation phase and the project man…

第83天: 代碼審計-PHP 項目RCE 安全調試追蹤代碼執行命令執行

案例一&#xff1a;CNVD拿1day-RCE命令執行-百家CMS 這里用代碼審計系統搜索system&#xff0c;可以利用的是第一種 打開看細節 查找函數引用 查找$_file第一次出現的地方 這個時候就明白了&#xff0c;必須上傳文件&#xff0c;然后利用文件名&#xff0c;去執行system命令 …

Java項目:基于ssm框架實現的房屋租售網站管理系統(房屋租賃和房屋出售一體)(B/S架構+源碼+數據庫+畢業論文+開題+任務書)

一、項目簡介 本項目是一套基于ssm框架實現的房屋租售網站管理系統 包含&#xff1a;項目源碼、數據庫腳本等&#xff0c;該項目附帶全部源碼可作為畢設使用。 項目都經過嚴格調試&#xff0c;eclipse或者idea 確保可以運行&#xff01; 該系統功能完善、界面美觀、操作簡單、…

Hadoop Java API操作 及讀取序列化文件(04-05-06)

針對于04-05-06班級整合。 1.創建java項目 2.修改pom.xml文件 添加依賴 <dependencies><dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-client</artifactId><version>3.1.4</version></dependenc…

【Linux網絡編程】IO多路轉接之poll

poll 1.poll初始2.poll函數接口3.poll服務器4.poll的優點缺點 點贊&#x1f44d;&#x1f44d;收藏&#x1f31f;&#x1f31f;關注&#x1f496;&#x1f496; 你的支持是對我最大的鼓勵&#xff0c;我們一起努力吧!&#x1f603;&#x1f603; 1.poll初始 poll也是一種linux…

Unity設計模式之工廠模式

什么是工廠模式&#xff1f; 工廠是一種創建型設計模式。通俗來講就是提供一種封裝對象創建的方式&#xff0c;將對象的創建和使用區分開。就是Unity里面通常用到的創建和管理對象。 工廠模式有什么優點&#xff1f; 1、封裝對象的創建方式&#xff0c;使其更加靈活、易于管理…

vue elementui時間選擇器返回的時間轉成年月日-格式

關鍵點&#xff1a;value-format“yyyy-MM-dd” <template><el-date-pickerv-model"date"type"date"placeholder"選擇日期"format"yyyy-MM-dd"value-format"yyyy-MM-dd"></el-date-picker> </template…

【教學類-55-04】20240515圖層順序挑戰(四格長條紙加黑色邊框、4*4、7張,不重復5400張,16坐標點顏色哈希值去重、保留7色)

背景需求&#xff1a; 前文實現了7張色彩紙條加上黑色邊框的需求。 【教學類-55-02】20240512圖層順序挑戰&#xff08;四格長條紙加黑色邊框、4*4、7張 、43200張去掉非7色有23040張&#xff0c;哈希算法快速去重剩余1221張&#xff09;-CSDN博客文章瀏覽閱讀1k次&#xff0…

GPT-4o模型介紹和使用方法

大家好,我是herosunly。985院校碩士畢業,現擔任算法研究員一職,熱衷于機器學習算法研究與應用。曾獲得阿里云天池比賽第一名,CCF比賽第二名,科大訊飛比賽第三名。擁有多項發明專利。對機器學習和深度學習擁有自己獨到的見解。曾經輔導過若干個非計算機專業的學生進入到算法…

9個優質免費視頻素材網站推薦丨2024年最新資源合集

在短視頻火爆的時代&#xff0c;高清、無水印、可商用的視頻素材變得尤為重要。下面是我精心整理的9個常用免費視頻素材網站&#xff0c;適合各類視頻創作者。希望你能找到滿意的素材&#xff01; 一、視頻素材 1. 蛙學府 優點&#xff1a;豐富的正版商用素材&#xff0c;涵蓋…

AI 繪畫神器 Fooocus 高級用法:設置、風格、模型、高級設置

本文收錄于《AI繪畫從入門到精通》專欄&#xff0c;專欄總目錄&#xff1a;點這里&#xff0c;訂閱后可閱讀專欄內所有文章。 大家好&#xff0c;我是水滴~~ 本文精選了一系列高級技巧和細致調整&#xff0c;旨在提升 Fooocus 用戶在利用 Stable Diffusion 模型進行圖像生成時的…

vue使用marked和highlight.js實現代碼高亮效果

marked是對markdown進行解析的插件&#xff0c;它可以把markdown語法解析成html語法&#xff0c;從而實現頁面效果&#xff0c;而highlight.js是對解析出的代碼實現高亮效果 效果&#xff1a; 安裝&#xff1a;避免踩我走的坑&#xff0c;安裝盡量按照這個版本安裝 npm install…

Java實現ZIP壓縮并支持設置密碼:輕松上手指南

在日常開發中&#xff0c;我們常常需要對文件進行壓縮處理&#xff0c;尤其是當文件需要傳輸或存儲時&#xff0c;壓縮不僅能節省空間&#xff0c;還能提升效率。而為壓縮文件添加密碼則為數據安全提供了額外保障。本文將指導你如何在Java中實現ZIP文件的壓縮&#xff0c;并為其…

Linux進程——進程地址空間

前言&#xff1a;在講完環境變量后&#xff0c;相信大家對Linux有更進一步的認識&#xff0c;而Linux進程概念到這也快接近尾聲了&#xff0c;現在我們了解Linux進程中的地址空間&#xff01; 本篇主要內容&#xff1a; 了解程序地址空間 理解進程地址空間 探究頁表和虛擬地址空…

matlab使用教程(71)—控制坐標區布局

1.與位置相關的屬性和函數 有幾個屬性和函數可用于獲取和設置坐標區的大小與位置。下表摘要顯示了這些屬性和函數。 函數或屬性描述 OuterPosition 屬性 使用此屬性可以查詢或更改坐標區的外邊界&#xff0c;包括標題、標簽和邊距。要更改外邊界&#xff0c;請將此屬性指定為…

MySQL、JDBC復盤及規劃

數據庫仍有習題尚未做完&#xff0c;策略從一天做完改為每天5到10題&#xff0c;以此達到掌握和復習的效果&#xff0c;JDBC的六部仍需每天練習&#xff0c;從明天開始正式進行JavaWeb的學習&#xff0c;預計持續到七月中旬&#xff0c;還會完成一個書城項目&#xff0c;六月底…

基于Hadoop的課程診改大數據可視化分析研究與應用

基于Hadoop的課程診改大數據可視化分析研究與應用 “A Study and Application of Big Data Visualization Analysis for Course Diagnosis and Improvement based on Hadoop” 完整下載鏈接:基于Hadoop的課程診改大數據可視化分析研究與應用 文章目錄 基于Hadoop的課程診改大…

Vue 快速入門:Vue初級

語法規則 前端渲染 渲染有幾種方式&#xff1a;原生js、js模板、Vue模板語法 原生js 使用字符串拼接 js模板語法 Vue.js 模板語法概述 Vue.js 是一個用于構建用戶界面的漸進式框架&#xff0c;其模板語法非常靈活和直觀。Vue 的模板語法基于 HTML&#xff0c;可以通過指令…

Symbol類型的作用

在TypeScript&#xff08;和JavaScript&#xff09;中&#xff0c;Symbol 是一個內置對象&#xff0c;它提供了一個唯一的且不可改變的數據類型&#xff0c;用于作為對象的鍵&#xff08;key&#xff09;。這種類型主要用于避免命名沖突&#xff0c;特別是在使用像 for...in 或…

kali更換鏡像源

vim /etc/apt/sources.list.d/docker.list 或 vim /ect/apt/sources.list #清華大學源 deb http://mirrors.tuna.tsinghua.edu.cn/kali kali-rolling main contrib non-free deb-src https://mirrors.tuna.tsinghua.edu.cn/kali kali-rolling main contrib non-free #中科大 de…