iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >Java使用Socket通信传输文件的方法示例
  • 216
分享到

Java使用Socket通信传输文件的方法示例

javasocketava 2023-05-31 11:05:36 216人浏览 安东尼
摘要

本文实例讲述了Java使用Socket通信传输文件的方法。分享给大家供大家参考,具体如下:前面几篇文章介绍了使用Java的Socket编程和NIO包在Socket中的应用,这篇文章说说怎样利用Socket编程来实现简单的文件传输。这里由于前

本文实例讲述了Java使用Socket通信传输文件的方法。分享给大家供大家参考,具体如下:

前面几篇文章介绍了使用Java的Socket编程NIO包在Socket中的应用,这篇文章说说怎样利用Socket编程来实现简单的文件传输。

这里由于前面一片文章介绍了Nio在Socket中的应用,所以这里在读写文件的时候也继续使用NIO包,所以代码看起来会比直接使用流的方式稍微复杂一点点。

下面的示例演示了客户端向服务器端发送一个文件,服务器作为响应给客户端回发一个文件。这里准备两个文件E:/test/server_send.log和E:/test/client.send.log文件,在测试完毕后在客户端和服务器相同目录下会多出两个文件E:/test/server_receive.log和E:/test/client.receive.log文件。

下面首先来看看Server类,主要关注其中的sendFile和receiveFile方法。

package com.Googlecode.garbagecan.test.socket.nio;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.net.InetSocketAddress;import java.nio.ByteBuffer;import java.nio.channels.ClosedChannelException;import java.nio.channels.FileChannel;import java.nio.channels.SelectionKey;import java.nio.channels.Selector;import java.nio.channels.ServerSocketChannel;import java.nio.channels.SocketChannel;import java.util.Iterator;import java.util.logging.Level;import java.util.logging.Logger;public class MyServer4 {  private final static Logger logger = Logger.getLogger(MyServer4.class.getName());  public static void main(String[] args) {    Selector selector = null;    ServerSocketChannel serverSocketChannel = null;    try {      // Selector for incoming time requests      selector = Selector.open();      // Create a new server socket and set to non blocking mode      serverSocketChannel = ServerSocketChannel.open();      serverSocketChannel.configureBlocking(false);      // Bind the server socket to the local host and port      serverSocketChannel.socket().setReuseAddress(true);      serverSocketChannel.socket().bind(new InetSocketAddress(10000));      // ReGISter accepts on the server socket with the selector. This      // step tells the selector that the socket wants to be put on the      // ready list when accept operations occur, so allowing multiplexed      // non-blocking I/O to take place.      serverSocketChannel.register(selector, SelectionKey.OP_ACCEPT);      // Here's where everything happens. The select method will      // return when any operations registered above have occurred, the      // thread has been interrupted, etc.      while (selector.select() > 0) {        // Someone is ready for I/O, get the ready keys        Iterator<SelectionKey> it = selector.selectedKeys().iterator();        // Walk through the ready keys collection and process date requests.        while (it.hasNext()) {          SelectionKey readyKey = it.next();          it.remove();          // The key indexes into the selector so you          // can retrieve the socket that's ready for I/O          doit((ServerSocketChannel) readyKey.channel());        }      }    } catch (ClosedChannelException ex) {      logger.log(Level.SEVERE, null, ex);    } catch (IOException ex) {      logger.log(Level.SEVERE, null, ex);    } finally {      try {        selector.close();      } catch(Exception ex) {}      try {        serverSocketChannel.close();      } catch(Exception ex) {}    }  }  private static void doit(final ServerSocketChannel serverSocketChannel) throws IOException {    SocketChannel socketChannel = null;    try {      socketChannel = serverSocketChannel.accept();      receiveFile(socketChannel, new File("E:/test/server_receive.log"));      sendFile(socketChannel, new File("E:/test/server_send.log"));    } finally {      try {        socketChannel.close();      } catch(Exception ex) {}    }  }  private static void receiveFile(SocketChannel socketChannel, File file) throws IOException {    FileOutputStream fos = null;    FileChannel channel = null;    try {      fos = new FileOutputStream(file);      channel = fos.getChannel();      ByteBuffer buffer = ByteBuffer.allocateDirect(1024);      int size = 0;      while ((size = socketChannel.read(buffer)) != -1) {        buffer.flip();        if (size > 0) {          buffer.limit(size);          channel.write(buffer);          buffer.clear();        }      }    } finally {      try {        channel.close();      } catch(Exception ex) {}      try {        fos.close();      } catch(Exception ex) {}    }  }  private static void sendFile(SocketChannel socketChannel, File file) throws IOException {    FileInputStream fis = null;    FileChannel channel = null;    try {      fis = new FileInputStream(file);      channel = fis.getChannel();      ByteBuffer buffer = ByteBuffer.allocateDirect(1024);      int size = 0;      while ((size = channel.read(buffer)) != -1) {        buffer.rewind();        buffer.limit(size);        socketChannel.write(buffer);        buffer.clear();      }      socketChannel.socket().shutdownOutput();    } finally {      try {        channel.close();      } catch(Exception ex) {}      try {        fis.close();      } catch(Exception ex) {}    }  }}

--结束END--

本文标题: Java使用Socket通信传输文件的方法示例

本文链接: https://www.lsjlt.com/news/225330.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Java使用Socket通信传输文件的方法示例
    本文实例讲述了Java使用Socket通信传输文件的方法。分享给大家供大家参考,具体如下:前面几篇文章介绍了使用Java的Socket编程和NIO包在Socket中的应用,这篇文章说说怎样利用Socket编程来实现简单的文件传输。这里由于前...
    99+
    2023-05-31
    java socket ava
  • 怎么使用java socket传输大文件
    要使用Java Socket传输大文件,可以使用以下步骤:1. 创建一个ServerSocket对象来监听某个端口号,等待客户端连接...
    99+
    2023-09-23
    java
  • Java Socket实现传输压缩对象的方法示例
    本文实例讲述了Java Socket实现传输压缩对象的方法。分享给大家供大家参考,具体如下:前面文章《Java Socket实现的传输对象功能示例》说到了用Java Socket来传输对象,但是在有些情况下比如网络环境不好或者对象比较大的情...
    99+
    2023-05-31
    java socket ava
  • Java Socket实现的传输对象功能示例
    本文实例讲述了Java Socket实现的传输对象功能。分享给大家供大家参考,具体如下:前面两篇文章介绍了怎样建立Java Socket通信,这里说一下怎样使用Java Socket来传输对象。首先需要一个普通的对象类,由于需要序列化这个对...
    99+
    2023-05-31
    java socket 传输对象
  • 实时通信Socket io的使用示例详解
    目录引言1、什么是socket.io2、socket.io的使用3、客户端自带事件4、版本问题引言 最近在工作中,遇到了一个需求,需要和后台服务实时通信,获取各种设备的实时状态、以及...
    99+
    2022-11-16
    Socket io实时通信 Socket io
  • java利用socket通信实现Modbus-RTU通信协议的示例代码
    Modbus Modbus是一种串行通信协议。Modbus 一个工业上常用的通讯协议、一种通讯约定。Modbus协议包括RTU、ASCII、TCP。其中MODBUS-RTU最常用,...
    99+
    2024-04-02
  • 如何在java中使用socket对zip文件进行传输
    今天就跟大家聊聊有关如何在java中使用socket对zip文件进行传输,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。服务器端程序:import java.io.*;import j...
    99+
    2023-05-31
    java socket zip文件
  • Java NIO Socket通信的方法是什么
    这篇文章主要讲解了“Java NIO Socket通信的方法是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java NIO Socket通信的方法是什么”吧!服务器代码:import&...
    99+
    2023-06-17
  • Java Socket使用加密协议进行传输对象的方法
    本文实例讲述了Java Socket使用加密协议进行传输对象的方法。分享给大家供大家参考,具体如下:前面的几篇文章介绍了Socket中一些常见的用法,但是对于一些有安全要求的应用就需要加密传输的数据,此时就需要用到SSLSocket了。还是...
    99+
    2023-05-31
    java socket ava
  • Java读取传输FTP文件实现示例
    目录一.需求二.依赖三.关键源码3.0 配置信息3.1 获取客户端3.2 获取ftp文件3.3 关闭ftp服务连接四.总结参考资料一.需求 FTP作为文件服务器,由提供服务方提供远程...
    99+
    2023-05-18
    Java读取传输FTP文件 Java读取FTP文件
  • python中网络通信数据传输的示例
    这篇文章给大家分享的是有关python中网络通信数据传输的示例的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。python实现网络通信数据传输前言基础知识学习一、OSI 模型二、TCP、IP协议族:三、python...
    99+
    2023-06-06
  • Java中用Socket实现HTTP文件上传实例
    我想做过web开发的程序员大部分都做过文件上传的功能,大多数时候我们都是借助于commons-fileupload这样的jar包实现的。下面我试着通过读取Socket的输入流来实现一个文件上传的功能。在做文件上传之前我们需要先了解一下HTT...
    99+
    2023-05-31
    socket 文件上传 ava
  • java使用Socket实现文件上传功能
    本文实例为大家分享了使用Socket实现文件上传功能的具体代码,供大家参考,具体内容如下 文件上传的步骤: 服务器端步骤: 1、创建ServerSocket 2、调用accept获...
    99+
    2024-04-02
  • 在Java中使用SFTP传输文件
    1. 概述 在本教程中,我们将讨论如何在Java中使用SFTP从远程服务器上传和下载文件。 我们将使用三个不同的库:JSch、SSHJ 和 Apache Commons VFS来实现。 2. 使用 JSch 首先,让我们看看如何使用JSch...
    99+
    2023-08-25
    java 服务器 apache
  • 详解Android使用Socket对大文件进行加密传输
    前言数据加密,是一门历史悠久的技术,指通过加密算法和加密密钥将明文转变为密文,而解密则是通过解密算法和解密密钥将密文恢复为明文。它的核心是密码学。数据加密目前仍是计算机系统对信息进行保护的一种最可靠的办法。它利用密码技术对信息进行加密,实现...
    99+
    2023-05-31
    android 文件加密 对大
  • java如何使用Socket实现文件上传功能
    这篇文章主要介绍了java如何使用Socket实现文件上传功能,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。具体内容如下文件上传的步骤:服务器端步骤:创建ServerSock...
    99+
    2023-06-29
  • C# TcpClient网络编程传输文件的示例
    目录一、简述二、内容一、简述   利用C# TcpClient在局域网内传输文件,可是文件发送到对面的时候却要重新命名文件的。那可不可以连着文件名与文件一起发过去呢? 二、内容 ...
    99+
    2024-04-02
  • PHP上传文件的使用方法
    本篇内容介绍了“PHP上传文件的使用方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!PHP 4.0.3之后PHP又出了一个新函数move_...
    99+
    2023-06-17
  • linux ssh传输文件的方法是什么
    在Linux系统中,可以使用scp命令通过SSH传输文件。scp命令的语法如下:```scp [可选参数] [源文件路径] [目标服...
    99+
    2023-09-17
    linux ssh
  • python 使用第三方库requests-toolbelt 上传文件流的示例
    python 使用第三方库requests-toolbelt 上传文件流,内容如下所示: # pip install requests-toolbelt 使用第三方库上传文件流 f...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作