Socket服务端和客户端文件传输
很多朋友在使用socket编程时不可避免的都做过文件传输,而视频电影等需要一个字节一个字节的传输;
但是客户端一般都通过-1进行终止,服务也一样;但是存在的问题是客户端永远不会把-1传递给服务端;
因此经常会遇到服务端卡死报错;所以在传输时先把文件接收标示传递给服务端,比如文件长度,或者终止字符等
Server:
public class Server { public static void main(String[] args) throws Exception { ServerSocket server =new ServerSocket(8888); Socket client =server.accept(); DataInputStream dis =new DataInputStream(client.getInputStream()); long size =dis.readLong(); String fileName =dis.readUTF(); System.out.println("文件大大小为:"+size+",文件名为:"+fileName); String dir ="D:/tmp/"; File dest =new File(dir+fileName); BufferedInputStream bis =new BufferedInputStream(client.getInputStream()); BufferedOutputStream bos =new BufferedOutputStream(new FileOutputStream(dest)); long readSize =0; while(true){ if (readSize > size) { break; } int data =bis.read(); bos.write(data); readSize++; } System.out.println("上传完毕"); bos.flush(); } }
Client:
public class Client { public static void main(String[] args) throws Exception { Socket client =new Socket("localhost",8888); File src =new File("D:/spark-1.6.1-bin-hadoop2.6.tgz"); String name =src.getName(); long size =src.length(); DataOutputStream dos =new DataOutputStream(client.getOutputStream()); dos.writeLong(size); dos.writeUTF(name); dos.flush(); BufferedInputStream bis =new BufferedInputStream(new FileInputStream(src)); BufferedOutputStream bos =new BufferedOutputStream(client.getOutputStream()); long writeSize =0; while(true){ bos.write(bis.read()); writeSize++; if(writeSize>size){ break; } } bos.flush(); } }
运行方式:
先启动server 再启动client
打印结果
文件大大小为:289405702,文件名为:spark-1.6.1-bin-hadoop2.6.tgz
上传完毕
Socket服务端和客户端文件传输的更多相关文章
- C# Socket服务端与客户端通信(包含大文件的断点传输)
步骤: 一.服务端的建立 1.服务端的项目建立以及页面布局 2.各功能按键的事件代码 1)传输类型说明以及全局变量 2)Socket通信服务端具体步骤: (1)建立一个Socket (2)接收 ...
- IE8下服务端获取客户端文件的路径为C:/fakePath问题的解决方案
上一篇文章上提到,IE8下服务端获取客户端文件的路径时,会变成C:/fakePath问题,于是乎通过文件路径去获得文件大小就失败了. 上网搜了一下,主要原因是IE8因为安全考虑,在上传文件时屏蔽了真实 ...
- Python3学习之路~8.3 socket 服务端与客户端
通过8.2的实例1-6,我们可以总结出来,socket的服务端和客户端的一般建立步骤: 服务端 步骤:1创建实例,2绑定,3监听,4阻塞,5发送&接收数据,6关闭. #Author:Zheng ...
- socket系列之socket服务端与客户端如何通信
上面已经分别介绍了ServerSocket跟Socket的工作步骤,并且从应用层往系统底层剖析其运作原理,我们清楚了他们各自的一块,现在我们将把他们结合起来,看看他们是如何通信的,并详细讨论一下他们之 ...
- 使用zlib模块实现HTTP服务端与客户端实现传输数据压缩
现如今在处理http请求的时候,由于请求的资源较多,如果不启用压缩的话,那么页面请求的流量将会非常大.启用gzip压缩,在一定程度上会大大的提高页面性能. 因此这写一个使用Node.js实现在http ...
- C# Socket服务端和客户端互相send和receive
服务端 { ]; ; { ...
- PHP socket服务端与客户端的简易通信
今天学习socket通信的同时,顺便整理了下以前初识socket的知识. 现在关于php的socket通信,有些框架已经十分成熟了,比如 swoole 和 workerman,这两个大家可以学习学习 ...
- golang的socket服务端与客户端
服务端 服务端的处理流程 监听端口 接收客户端的链接 创建goroutine,处理该链接 package main import ( "fmt" "net" ) ...
- Socket服务端和客户端(C++,CodeBlocks+GCC编译)
//main.cpp 1 #include "j_socket.h" #include <stdio.h> #include <pthread.h> ; j ...
随机推荐
- jenkins git项目clean before checkout 和 wipe out repository & force clone
clean before checkout:会先执行一遍git clone,删除一些untracked文件和目录,比如删除上一次打包编译产生的文件 wipe out repository & ...
- synchronized和lock的使用分析(优缺点对比详解)
1.synchronized加同步格式: synchronized(需要一个任意的对象(锁)){ 代码块中放操作共享数据的代码. } synchromized缺陷synchronized是java中的 ...
- 前端之CSS:CSS补充
css样式之补充... css常用的一些属性: 1.去掉下划线 :text-decoration:none ;2.加上下划线: text-decoration: underline; 3.调整文本和图 ...
- 8.docker的系统资源限制
一. 概述 默认docker容器使用的memory资源和CPU资源是没有限制的,但是我们可以在docker run的时候通过选项去限制,具体参考官方文档. [root@node1 ~]# docker ...
- 基于VSFTP的本地YUM源及光盘YUM源搭建
基于VSFTP的本地YUM源及光盘YUM源搭建 一.yum环境的本地源搭建(基于VSFTP): 1)安装vsftp; *********************************** ...
- JavaSE---显式锁
1.概述 1.1.jdk5之前,用于 调节共享对象访问机制 只有 synchronized.volatile: jdk5之后,提供了 显示锁:Lock.ReentrantLock...: ...
- 【leetcode】838. Push Dominoes
题目如下: 解题思路:本题题目中有一点要求很关键,“we will consider that a falling domino expends no additional force to a fa ...
- POJ 2778 DNA Sequence ( AC自动机、Trie图、矩阵快速幂、DP )
题意 : 给出一些病毒串,问你由ATGC构成的长度为 n 且不包含这些病毒串的个数有多少个 分析 : 这题搞了我真特么久啊,首先你需要知道的前置技能包括 AC自动机.构建Trie图.矩阵快速幂,其中矩 ...
- BootStrap 用法
1 下载bootstrap组件 2 在jsp页面中加入bootstrap <link rel="stylesheet" type="text/css" ...
- 10 Django与Ajax
知识预览 1. Ajax 2. 文件上传 Ajax Ajax简介 AJAX(Asynchronous Javascript And XML)翻译成中文就是“异步Javascript和XML”.即使用J ...