这里写目录标题

  • Java中通过socket连接传送文件
    • 前言
    • socket嵌套字
    • 发送方
    • 接收方
    • 总结

Java中通过socket连接传送文件

前言

在项目的开发中经常遇到需要传送文件的情况,有时候是通过ftp服务器进行传输,或者是sftp传送。其核心还是通过嵌套字的形式进行数据传输,刨除判别机制和登录机制,写一个简单的基于TCP协议socket网络编程的文件传送。

socket嵌套字

理解:解释客户端与服务端,或者是两个机器之间,一个接收文件另一个发送文件。发送方需要知道要发给谁,这时候就需要知道接收方的ip和端口。
通俗的理解IP就是路,端口就是众多门中的一个约定好的能打开的那个门。

发送方

代码如下,发送的逻辑为:
1.首先通过java中socket对象创建连接
2.实例化一个字节输出数据流
3.获取文件输入串流
4.开始输出文件字节流
5.通知接收方数据传送完成
6.获取接受方响应数据流
7.标记结束项

package action;import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.Socket;public class SocketCilentAction {private String host; //目标IPprivate int port; //目标端口private String filepath; //文件绝对路径public String getFilepath() {return filepath;}public void setFilepath(String filepath) {this.filepath = filepath;}public String getHost() {return host;}public void setHost(String host) {this.host = host;}public int getPort() {return port;}public void setPort(int port) {this.port = port;}private void sendCilent(String host, int port, String filepath) throws Exception {//1.首先通过java中socket对象创建连接Socket getsocket = new Socket(InetAddress.getByName(host), port);//2.实例化一个字节输出数据流OutputStream os = getsocket.getOutputStream();//3.获取文件输入串流FileInputStream files = new FileInputStream(new File(filepath));//4.开始输出文件字节流byte[] buffer=new byte[1024*10];int length;/** socket编程基于I/O流 所以 输出流写转为字节数组的文件 =向接收方发送文件*/while ((length = files.read(buffer))!=-1){os.write(buffer,0,length);}//5.通知接收方数据传送完成getsocket.shutdownOutput();//6.获取接受方响应数据流InputStream in = getsocket.getInputStream();ByteArrayOutputStream bytes = new ByteArrayOutputStream();byte[] buffer1=new byte[1024*10];while ((length=in.read(buffer1))!=-1){bytes.write(buffer1,0,length);}//7.标记结束项System.out.println(bytes.toString());/* 关闭所有资源 */bytes.close();files.close();os.close();getsocket.close();}public static void main(String[] args) throws Exception {SocketCilentAction socketAction = new SocketCilentAction();socketAction.setHost("127.0.0.1");socketAction.setPort(8888);socketAction.setFilepath("F:\\image\\alias2.jpg");socketAction.sendCilent(socketAction.getHost(), socketAction.getPort(),socketAction.getFilepath());}}

接收方

接收方的逻辑和发送方基本相似,首先要监听约定好的接收端口,也就是把门给打开,才能够让数据进来。接着就是接收数据,在接收完数据之后返回一个状态就行,可以是一句话、一个字符,也可以是一个文件等等。主要看双方的约定。基本流程:
1.创建监听端口
2.通过socket对象获取输入流获取文件
3.绑定文件路径,用于存放文件
4.返回接收状态

package action;import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;public class SocketServer {public static void main(String[] args) throws IOException{//1.创建监听端口@SuppressWarnings("resource")ServerSocket serverSocket = new ServerSocket(8888);Socket socket = serverSocket.accept();//2.通过socket对象获取输入流获取文件InputStream in = socket.getInputStream();//3.绑定文件路径,用于存放文件FileOutputStream files = new FileOutputStream(new File("F:\\*"));int length;byte[] buffer1=new byte[1024*10];while ((length=in.read(buffer1))!=-1){files.write(buffer1,0,length);}//4.返回接收状态OutputStream outputStream = socket.getOutputStream();outputStream.write("接收成功".getBytes());/* 关闭所有资源 */files.close();in.close();//关闭后将不能再监听端口//socket.close();//serverSocket.close();}}

其中:接收的文件路径中*代表文件储存名称。例如:和所传文件名相同alias2.jpg,也可以是其他。

总结

以上就是最简单的文件串流发送过程,首先要开启接收方程序进行端口的监听,然后通过发送方发送文件。能够绕明白串流的发送过程就行了,主要方法就inout两个部分的使用。

Java中基于TCP通过socket嵌套字连接方式传送文件相关推荐

  1. Java 基于TCP的socket实现文件传输

    Java 基于TCP的socket实现文件传输 基于TCP的socket结合java的io流 实现客户端与服务器之间的文件传输 Socket 套接字(socket)是一个抽象层,应用程序可以通过它发送 ...

  2. socket网络编程 java_Java Web 基础(一) 基于TCP的Socket网络编程

    一.Socket简单介绍 Socket通信作为Java网络通讯的基础内容,集中了异常.I/O流模式等众多知识点.学习Socket通信,既能够了解真正的网络通讯原理,也能够增强对I/O流模式的理解. 1 ...

  3. Java中的TCP发送和接收数据

    一.发送数据 一.Java中的TCP通信 Java对基于TCP协议的网络提供了良好的封装,使用Socket对象来代表两端的通信端口,并通过Socket产生IO流来进行网络通信 Java为客户端提供了S ...

  4. 网络编程懒人入门(八):手把手教你写基于TCP的Socket长连接

    转自即时通讯网:http://www.52im.net/ 本文原作者:"水晶虾饺",原文由"玉刚说"写作平台提供写作赞助,原文版权归"玉刚说" ...

  5. Java中的网络支持Socket应用

    title: Java中的网络支持Socket应用 date: 2019-05-04 14:00:00 Java中的网络支持Socket应用 前言: 单机的程序终究会被淘汰的,所以还是要让你的程序软件 ...

  6. 基于TCP的socket详解(Linux系统)

    内容有点多建议配合实例学习:https://blog.csdn.net/FUN6367/article/details/105294984 1.基于TCP的socket五元组结构 两个程序:Serve ...

  7. 基于TCP的socket编程网络掉线重连

    基于TCP的socket编程   sockets(套接字)编程有三种,流式套接字(SOCK_STREAM),数据报套接字(SOCK_DGRAM),原始套接字(SOCK_RAW):基于TCP的socke ...

  8. 基于TCP的Socket通讯

    基于 TCP 的 Socket 通讯 最近要实现两个机器之间基于 TCP 的 socket 通讯(个人使用 Python 实现),尝试了官方的 demo 代码后总是被拒绝连接,仔细研究了一下并成功建立 ...

  9. Java中怎么把文本追加到已经存在的文件

    Java中怎么把文本追加到已经存在的文件 我需要重复把文本追加到现有文件中.我应该怎么办? 回答一 你是想实现日志的目的吗?如果是的话,这里有几个库可供选择,最热门的两个就是Log4j 和 Logba ...

最新文章

  1. JS中简单原型的使用
  2. 复习06统计学习方法(Logistic回归与最大熵模型)---图片版
  3. matlab 显示多为,求助!!如何把多输入多输出系统的传函转换为状态空间表达式?...
  4. QPS/TPS/并发量/系统吞吐量的概念
  5. SQL语句中 LIMIT与OFFSET
  6. vue的插值语法及el和data、methods语法释义
  7. 1. VIM 系列 - 简单入门,拾起兴趣
  8. 与众不同 windows phone (15) - Media(媒体)之后台播放音频
  9. jvm7 jvm8_JVM PermGen –您在哪里?
  10. 数据结构 二叉树的存储结构_线程二叉树| 数据结构
  11. 【Java】图解 Java 中的数据结构及原理
  12. python 类创建
  13. vue2.0桌面端框架_Vue PC端框架
  14. OpenCV之线性混合操作
  15. 目标检测应用竞赛 | 天池铝型材表面瑕疵(含数据集、详细解决方案)
  16. DDR核心频率、工作频率,等效频率详解
  17. python推箱子小游戏_python写的推箱子小游戏
  18. 码码在线考勤系统笔记(四)
  19. 在OpenGL中创建一个球体动画,使球体在窗口内做自由落体运动,并在撞击地面后能够返回原来高度
  20. JS中国标准时间转化为年月日时分秒‘yyyy-MM-dd hh:mm:ss‘

热门文章

  1. iOS一个简单的设置圆角不引起性能问题的分类
  2. 1.2低级线程处理API
  3. intelj idea安装和配置
  4. java基础问题集锦一
  5. python成长之路【第七篇】:面向对象
  6. atitit.MIZIAN 陕北方言 特有词汇 大词典 attilax 整理 a--g v1 q31.xlsx
  7. android animation学习
  8. 数据结构与算法学习笔记01-数组
  9. Linux运维问题解决(3)——VMware启动虚拟机报错 : 该虚拟机似乎正在使用中。如果该虚拟机未在使用,请按“获取(T)
  10. 我月薪3W,却不用熬夜加班做报表,这个养老工具,你一定要知道