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

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

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

先了解一下socket基本概念

socket也叫套接字:

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

簡單理解就是:

兩個主機之間要通信,就需要知道彼此的ip,端口號等信息,而一臺主機這些信息的集合:

就可以理解為一個端點,即為套接字

雙方通過套接字作為一種坐標,建立信息通道,形成連接(兩點連接一條直線)

簡單理解了套接字的概念后,來看看如何通過java socket編程來實現(xiàn)

兩臺主機文件的接收與發(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.通過socket對象 創(chuàng)建socket連接
  Socket socket = new Socket(InetAddress.getByName("127.0.0.1"), 9000);
  //2,創(chuàng)建一個字節(jié)輸出流
  OutputStream os = socket.getOutputStream();
  //3.字節(jié)文件輸入流 讀取文件
  //避免出錯 寫需要發(fā)送文件的絕對路徑
  FileInputStream fis = new FileInputStream(new File("F:/TEST/1604407051256.jpg"));
  //4.字節(jié)文件輸出流 寫出文件
  byte[] buffer=new byte[1024*10];
  int len;
  while ((len=fis.read(buffer))!=-1){
   //socket編程基于I/O流 所以
   //輸出流寫轉(zhuǎn)為字節(jié)數(shù)組的文件 =向接收方發(fā)送文件
   os.write(buffer,0,len);
  }
  //通知服務器我傳送完了 調(diào)用shutdownOutput() 否則影響接下來代碼執(zhí)行
  socket.shutdownOutput();

  //確定服務器接受完畢,斷開連接
  //獲取接收方響應回來的 接受完畢! 響應
  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);
  }
  //顯示接收方的響應
  System.out.println(baos.toString());

  //發(fā)送結束后,最后關閉所有資源
  //關閉資源好習慣 這部分寫的簡單
  //一般建議先進行一個非空判斷再關閉
  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 {
  //通過ServerSocket對象 創(chuàng)建接收端套接字
  ServerSocket serverSocket=null;
  //套接字
  Socket socket=null;
  //字節(jié)輸入流
  InputStream in=null;

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

  //將發(fā)送者發(fā)送過來的 文件通過文件字節(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());
  //接受結束后,關閉資源好習慣 這部分寫的簡單
  //一般建議先進行一個非空判斷再關閉
  fos.close();
  serverSocket.close();
  socket.close();
  in.close();
 }
}

測試方法:

以上代碼可直接粘貼測試
1、先運行接收者等待接受,

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

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

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

總結:

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

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

相關文章

  • Java中的cglib原理解析

    Java中的cglib原理解析

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

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

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

    spring boot集成shiro詳細教程(小結)

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

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

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

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

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

    java鏈表應用--基于鏈表實現(xiàn)隊列詳解(尾指針操作)

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

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

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

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

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

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

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

    Java中IO流概述

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

最新評論

水城县| 依安县| 固镇县| 来宾市| 乌海市| 六安市| 松桃| 柳州市| 宁波市| 云浮市| 山阴县| 阳山县| 甘德县| 大丰市| 徐闻县| 清河县| 阿克陶县| 西乌| 莱阳市| 榆社县| 甘泉县| 江达县| 鄂托克旗| 香港 | 龙山县| 海丰县| 南漳县| 南乐县| 滕州市| 乡宁县| 黎川县| 雷山县| 时尚| 永泰县| 凤冈县| 葫芦岛市| 陆丰市| 攀枝花市| 鸡泽县| 任丘市| 松江区|