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

Java基于TCP協(xié)議socket網(wǎng)絡(luò)編程的文件傳送的實(shí)現(xiàn)

 更新時(shí)間:2020年12月04日 08:31:54   作者:Tyler Yue  
這篇文章主要介紹了Java基于TCP協(xié)議socket網(wǎng)絡(luò)編程的文件傳送的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

先了解一下socket基本概念

socket也叫套接字:

是指在網(wǎng)路中不同主機(jī)上的應(yīng)用進(jìn)程之間,進(jìn)行雙向通信的端點(diǎn)的抽象。

簡(jiǎn)單理解就是:

兩個(gè)主機(jī)之間要通信,就需要知道彼此的ip,端口號(hào)等信息,而一臺(tái)主機(jī)這些信息的集合:

就可以理解為一個(gè)端點(diǎn),即為套接字

雙方通過(guò)套接字作為一種坐標(biāo),建立信息通道,形成連接(兩點(diǎn)連接一條直線)

簡(jiǎn)單理解了套接字的概念后,來(lái)看看如何通過(guò)java socket編程來(lái)實(shí)現(xiàn)

兩臺(tái)主機(jī)文件的接收與發(fā)送:

代碼如下:

發(fā)送方:

import java.io.*;
import java.net.InetAddress;
import java.net.Socket;


/**
 * 發(fā)送者
 */
public class TcpSendCilent {
 public static void main(String[] args) throws Exception {
  //1.通過(guò)socket對(duì)象 創(chuàng)建socket連接
  Socket socket = new Socket(InetAddress.getByName("127.0.0.1"), 9000);
  //2,創(chuàng)建一個(gè)字節(jié)輸出流
  OutputStream os = socket.getOutputStream();
  //3.字節(jié)文件輸入流 讀取文件
  //避免出錯(cuò) 寫(xiě)需要發(fā)送文件的絕對(duì)路徑
  FileInputStream fis = new FileInputStream(new File("F:/TEST/1604407051256.jpg"));
  //4.字節(jié)文件輸出流 寫(xiě)出文件
  byte[] buffer=new byte[1024*10];
  int len;
  while ((len=fis.read(buffer))!=-1){
   //socket編程基于I/O流 所以
   //輸出流寫(xiě)轉(zhuǎn)為字節(jié)數(shù)組的文件 =向接收方發(fā)送文件
   os.write(buffer,0,len);
  }
  //通知服務(wù)器我傳送完了 調(diào)用shutdownOutput() 否則影響接下來(lái)代碼執(zhí)行
  socket.shutdownOutput();

  //確定服務(wù)器接受完畢,斷開(kāi)連接
  //獲取接收方響應(yīng)回來(lái)的 接受完畢! 響應(yīng)
  InputStream inputStream = socket.getInputStream();
  ByteArrayOutputStream baos=new ByteArrayOutputStream();
  byte[] bytes2=new byte[1024*10];
  int len2;
  while ((len2=inputStream.read(bytes2))!=-1){
    baos.write(bytes2,0,len2);
  }
  //顯示接收方的響應(yīng)
  System.out.println(baos.toString());

  //發(fā)送結(jié)束后,最后關(guān)閉所有資源
  //關(guān)閉資源好習(xí)慣 這部分寫(xiě)的簡(jiǎn)單
  //一般建議先進(jìn)行一個(gè)非空判斷再關(guān)閉
  baos.close();
  fis.close();
  os.close();
  socket.close();

 }
}

接收方:

import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;

/**
 * 接收端
 */
public class TcpAcceptServer {
 public static void main(String[] args) throws IOException {
  //通過(guò)ServerSocket對(duì)象 創(chuàng)建接收端套接字
  ServerSocket serverSocket=null;
  //套接字
  Socket socket=null;
  //字節(jié)輸入流
  InputStream in=null;

  //默認(rèn)參數(shù)定義端口號(hào) 發(fā)送方依據(jù)這個(gè)端口號(hào)發(fā)送
  serverSocket=new ServerSocket(9000);
  socket = serverSocket.accept();
  //socket對(duì)象 獲取輸入流,拿到文件
  in = socket.getInputStream();

  //將發(fā)送者發(fā)送過(guò)來(lái)的 文件通過(guò)文件字節(jié)輸出流 輸出到指定路徑下
  FileOutputStream fos = new FileOutputStream(new File("F:/recevice.jpg"));
  int len;
  byte[] bytes=new byte[1024*10];
  while ((len=in.read(bytes))!=-1){
    fos.write(bytes,0,len);
  }

  //通知發(fā)送者接受完畢了
  OutputStream outputStream = socket.getOutputStream();

  outputStream.write("我是文件接收者:我已成功接受".getBytes());
  //接受結(jié)束后,關(guān)閉資源好習(xí)慣 這部分寫(xiě)的簡(jiǎn)單
  //一般建議先進(jìn)行一個(gè)非空判斷再關(guān)閉
  fos.close();
  serverSocket.close();
  socket.close();
  in.close();
 }
}

測(cè)試方法:

以上代碼可直接粘貼測(cè)試
1、先運(yùn)行接收者等待接受,

2、再運(yùn)行發(fā)送者,

3、等待接收者向發(fā)送者響應(yīng): 我是文件接收者:我已成功接受;

4、接收者指定接受目錄下、查看接收文件存在即為接收成功!

總結(jié):

這個(gè)demo實(shí)現(xiàn)并不是很難,主要考驗(yàn)了我們對(duì)于io流的熟練程度

到此這篇關(guān)于Java基于TCP協(xié)議socket網(wǎng)絡(luò)編程的文件傳送的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)Java socket文件傳送內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java中的cglib原理解析

    Java中的cglib原理解析

    這篇文章主要介紹了Java中的cglib原理解析,由于代理類(lèi)繼承了被代理類(lèi),所以調(diào)用sayHello()方法時(shí)會(huì)直接調(diào)用代理類(lèi)的sayHello()方法,而在代理類(lèi)的方法中,調(diào)用了Callback的邏輯,需要的朋友可以參考下
    2023-10-10
  • Spring MVC請(qǐng)求參數(shù)的獲取教程指南

    Spring MVC請(qǐng)求參數(shù)的獲取教程指南

    本文介紹了SpringMVC中如何獲取各種類(lèi)型的請(qǐng)求參數(shù),包括基本類(lèi)型、POJO、數(shù)組、集合以及RESTful風(fēng)格的參數(shù),還討論了請(qǐng)求參數(shù)中文亂碼的解決方案,參數(shù)綁定的注解如@RequestParam,以及自定義類(lèi)型轉(zhuǎn)換器的實(shí)現(xiàn),需要的朋友可以參考下
    2024-10-10
  • spring boot集成shiro詳細(xì)教程(小結(jié))

    spring boot集成shiro詳細(xì)教程(小結(jié))

    這篇文章主要介紹了spring boot 集成shiro詳細(xì)教程,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-01-01
  • SpringBoot使用Sa-Token實(shí)現(xiàn)路徑攔截和特定接口放行

    SpringBoot使用Sa-Token實(shí)現(xiàn)路徑攔截和特定接口放行

    這篇文章主要介紹了SpringBoot使用Sa-Token實(shí)現(xiàn)路徑攔截和特定接口放行,文中通過(guò)代碼示例講解的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2024-06-06
  • SpringBoot實(shí)現(xiàn)Md5對(duì)數(shù)據(jù)庫(kù)數(shù)據(jù)加密的示例

    SpringBoot實(shí)現(xiàn)Md5對(duì)數(shù)據(jù)庫(kù)數(shù)據(jù)加密的示例

    本文主要介紹了SpringBoot實(shí)現(xiàn)Md5對(duì)數(shù)據(jù)庫(kù)數(shù)據(jù)加密的示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04
  • java鏈表應(yīng)用--基于鏈表實(shí)現(xiàn)隊(duì)列詳解(尾指針操作)

    java鏈表應(yīng)用--基于鏈表實(shí)現(xiàn)隊(duì)列詳解(尾指針操作)

    這篇文章主要介紹了java鏈表應(yīng)用--基于鏈表實(shí)現(xiàn)隊(duì)列,結(jié)合實(shí)例形式分析了java基于鏈表實(shí)現(xiàn)隊(duì)列尾指針相關(guān)操作使用技巧,需要的朋友可以參考下
    2020-03-03
  • 通過(guò)反射注解批量插入數(shù)據(jù)到DB的實(shí)現(xiàn)方法

    通過(guò)反射注解批量插入數(shù)據(jù)到DB的實(shí)現(xiàn)方法

    今天小編就為大家分享一篇關(guān)于通過(guò)反射注解批量插入數(shù)據(jù)到DB的實(shí)現(xiàn)方法,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2019-03-03
  • Java集合中獲取數(shù)據(jù)前驅(qū)和后繼元素的實(shí)現(xiàn)

    Java集合中獲取數(shù)據(jù)前驅(qū)和后繼元素的實(shí)現(xiàn)

    使用一致性hash時(shí),如何找到一個(gè)hash值對(duì)應(yīng)的臨近節(jié)點(diǎn),可以使用集合中獲取數(shù)據(jù)的前驅(qū)和后繼元素實(shí)現(xiàn),所以本文給大家介紹了Java集合中獲取數(shù)據(jù)前驅(qū)和后繼元素的實(shí)現(xiàn),文中有相關(guān)的代碼示例供大家參考,需要的朋友可以參考下
    2024-05-05
  • 在SpringMVC框架下實(shí)現(xiàn)文件的上傳和下載示例

    在SpringMVC框架下實(shí)現(xiàn)文件的上傳和下載示例

    本篇文章主要介紹了在SpringMVC框架下實(shí)現(xiàn)文件的上傳和下載示例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。
    2017-02-02
  • Java中IO流概述

    Java中IO流概述

    大家好,本篇文章主要講的是Java中IO流概述,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話(huà)記得收藏一下,方便下次瀏覽
    2022-01-01

最新評(píng)論

天全县| 井研县| 东安县| 页游| 慈溪市| 汉中市| 长兴县| 犍为县| 贵南县| 永宁县| 仙桃市| 青海省| 广河县| 曲麻莱县| 福鼎市| 壤塘县| 昭觉县| 石泉县| 镇坪县| 南宫市| 疏勒县| 天峻县| 江永县| 新沂市| 宁海县| 泾源县| 高州市| 兴安盟| 萨嘎县| 荔波县| 南雄市| 即墨市| 南投县| 惠东县| 阿拉尔市| 田林县| 五寨县| 安宁市| 东乌珠穆沁旗| 资中县| 和田市|