java文件传输连接方式_Java 学习笔记 网络编程 使用Socket传输文件 CS模式

Socket的简单认识

Socket是一种面向连接的通信协议,Socket应用程序是一种C/S(Client端/Server端)结构的应用程序 Socket是两台机器间通信的端点。 Socket是连接运行在网络上的两个程序间的双向通讯端点。

Socket通信原理

84fa1c43bff1699aa8689ad6aa4577f2.png

Server服务端的输入流相当于Client客户端的输出流

Server服务端的输出流相当于Client客户端的输入流

注意

文件传输使用字节流**(Steam)**

使用DataOutputStream,DataOutputStream可以传java的基本类型和流

代码

Server.java

package csmode2;

import java.io.IOException;

import java.net.ServerSocket;

import java.net.Socket;

/**

* @author StarsOne

* @date Create in 2019-4-14 0014 10:53:58

* @description

*/

class Server {

public static void main(String[] args) {

try (ServerSocket serverSocket = new ServerSocket(9090)){

System.out.println("服务器已启动...");

while (true) {

System.out.println("等待接收文件");

//调用了accept方法之后,会一直处于等待接受文件的状态

Socket socket = serverSocket.accept();//接收客户端传来的数据

//交给后台线程处理

new AcceptThread(socket.getInputStream()).start();

}

} catch (IOException e) {

e.printStackTrace();

}

}

}

AcceptThread.java

package csmode2;

import java.io.DataInputStream;

import java.io.File;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.InputStream;

/**

* @author StarsOne

* @date Create in 2019/4/15 0015 14:17

* @description

*/

class AcceptThread extends Thread {

private InputStream inputStream;

public AcceptThread(InputStream inputStream) {

this.inputStream = inputStream;

}

@Override

public void run() {

try {

//使用DataInputStream包装输入流

DataInputStream dataInputStream = new DataInputStream(inputStream);

String fileName = dataInputStream.readUTF();

System.out.println(fileName);//在控制台显示文件名

//往某个位置写入文件

FileOutputStream fileOutputStream = new FileOutputStream("Q:\\MY" + File.separator + fileName);

int c = -1;

while ((c = dataInputStream.read()) != -1) {

fileOutputStream.write(c);

fileOutputStream.flush();

}

System.out.println("文件上传成功!");

} catch (IOException e) {

e.printStackTrace();

}

}

}

Client.java

package csmode2;

import java.io.*;

import java.net.Socket;

/**

* @author StarsOne

* @date Create in 2019-4-14 0014 10:53:49

* @description

*/

class Client {

public static void main(String[] args) {

// File[] files = new File("E:\\wan\\testfile").listFiles();

//如果是多个文件,只需要把文件放入一个list或者数组中,使用for循环把数组的文件全部上传到服务器

//上传的文件

File file = new File("R:\\动漫图片\\test.jpg");

try(Socket socket = new Socket("localhost", 9090)) {

OutputStream outputStream = socket.getOutputStream();

//使用DataOutputStream

DataOutputStream dataOutputStream = new DataOutputStream(outputStream);

//向服务器端传文件名

dataOutputStream.writeUTF(file.getName());

dataOutputStream.flush();//刷新流,传输到服务端

//向服务器端传文件,通过字节流

//字节流先读取硬盘文件

BufferedInputStream bufferedInputStream = new BufferedInputStream(new FileInputStream(file));

int c = -1;

while ((c=bufferedInputStream.read())!=-1) {

//将读取的文件以字节方式写入DataOutputStream,之后传输到服务端

//这里也可以使用byte[]数据进行读取和写入

dataOutputStream.write(c);

dataOutputStream.flush();

}

} catch (IOException e) {

e.printStackTrace();

}

}

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/503618.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何给python升级_python升级后,如何给virtualenv里的python进行升级

我也碰到了这个问题,用brew升级python的时候忘记了备份,升级之后才发现pip也不能正常工作了,不过幸好找到了解决方法,重新安装几百兆的package实在是不能忍……先将虚拟环境中的部分文件删除cd rm .Pythonrm bin/pip{,2,2.7}rm bi…

创建线程的三种方法_Netty源码分析系列之NioEventLoop的创建与启动

前言前三篇文章分别分析了 Netty 服务端 channel 的初始化、注册以及绑定过程的源码,理论上这篇文章应该开始分析新连接接入过程的源码了,但是在看源码的过程中,发现有一个非常重要的组件:NioEventLoop,出现得非常频繁…

java彩票案例_java彩票例子

1.[代码]java彩票例子import java.util.HashSet; //自动过滤重复的集合import java.util.Random;public class LuckyTic {public static void main(String[] args) {// TODO Auto-generated method stubHashSet hs new HashSet();Random r new Random();int num r.nextInt()…

java正则表达式匹配xml标签_用正则表达式匹配HTML\XML等文件中的标签

测试用HTML源文件:View Code《完美世界:天界的召唤》缤纷圣诞总动员[ 中华网 1小时前]经过了平安夜和圣诞节,节日的气氛被推到了最高点!《完美世界:天界的召唤》为玩家准备了精彩纷呈的圣诞节活动,而玩家也…

python cursor游标_第二十三天 python中游标的使用

游标(cursor):系统为用户开通的一个数据缓冲区,用于存放SQL语句执行结果。用户使用的sql会逐一的在游标中获取记录,并赋值给主变量,交由Python进一步处理,一组主变量只能存放一条记录。例题:from T1 import…

python 列表比较不同物质的吸热能力_python列表里面根据一定的条件挑选元素

update:之前一版是错的,忽略了两层栈深还必须ticket、spce连续的要求换个解法,代码有些冗长#!/usr/bin/env python# -*- coding: utf-8 -*-def is_ticket(node):return node.startswith(ticket)def is_spec(node):return node.startswith(spec)def deal1…

java中arraycopy的用法_[jdk源码阅读系列]Java中System.arraycopy()的用法

本文转载,原文链接:3分钟了解Java中System.arraycopy的用法 - 伊万夫斯基 - 博客园 https://www.cnblogs.com/benjieqiang/p/11428832.html3分钟了解Java中System.arraycopy的用法System提供了一个静态方法arraycopy(),我们可以使用它来实现数组之间的复…

人工智能python小程序_Python:一个可以套路别人的python小程序

一个可以套路别人的python小程序~先简要介绍一下程序。程序是使用pycharm工具,python语言所写。程序包括客户端 client.py 和服务器端 server.py 两部分,利用了python中的socket包。咳咳,使用方法来了!首先,你需要你和…

java spring hiberate_Java程序员:Spring Boot和Hibernate一起使用的技巧

Hibernate不需要多介绍,它是Java中最受欢迎的ORM。同样,Spring Boot是功能最强大且易于使用的框架。本文并不是描述一些关于Hibernate或Spring Boot的用法,因为有很多。相反,我们将研究同时使用它们时可能遇到的一些常见错误以及如…

postgresql 查询序列_RazorSQL for Mac(数据库工具查询) v9.0.9

RazorSQL Mac激活版是一款专门为mac用户推出的数据库管理软件,允许您从一个数据库工具查询,更新,导航和管理所有主要数据库!软件特色RazorSQL 是一个非开源的功能非常强大数据库查询工具、SQL的编辑、数据库管理工具。支持通过 JD…

vsm特征提取java_文本特征提取方案汇总

文本特征提取方案汇总文本分析是机器学习算法的主要应用领域。但是,文本分析的原始数据无法直接丢给算法,这些原始数据是一组符号,因为大多数算法期望的输入是固定长度的数值特征向量而不是不同长度的文本文件。一、文本数据的表示模型​ 文本…

脚本启动显示查询频繁被服务器防御_又被CC攻击弄得心有余悸?莫怕!这里教你如何防御...

转自CSDN,博主:一只IT小小鸟。CC攻击原理HTTP Flood 俗称CC攻击(Challenge Collapsar)是DDOS(分布式拒绝服务)的一种,前身名为Fatboy攻击,也是一种常见的网站攻击方法。是针对 Web 服务在第七层协议发起的攻击。攻击者相较其他三层…

java 怎么获取形参名_获得方法形参名称列表 -- 哦也,搞定!!

JAVA获取类的方法的参数名 – 老话题,新方法!!折腾了一天,终于搞定了.测试了nutz所有的类,均读取正常!! 完美读取任何class的变量名信息! 呵呵,当前,前提是编译时含debug信息.无任何依赖,不需要asm,不要其他任何字节码工具,纯标准JDK API实现. 核心代码,仅一个方法,130行,哦也!…

robotframework安装_python3.9.0 + robotframework + selenium3 实例体验

在win10上安装python3.9.0robotframework中我们做了基本的使用robot framework的环境搭建,这一章主要通过一个简单的实例来体验下robot framework的使用方式、运行、报告和日志(非常漂亮的自动化测试报告噢!)。首先我们打开RIDE,快捷键 ctrln…

vmware 搭建k8s无法ping通子节点_一波四折 —— 记一次K8S集群应用故障排查

一波四折——记一次K8S集群应用故障排查Part1 初露端倪一个周四的下午,客户的报障打破了微信群的平静。“我们部署在自建K8S集群上的应用突然无法正常访问了,现在业务受到了影响!”收到客户的报障,我们立刻响应,向客户…

java bytebuffer string_Java中的ByteBuffer get()方法

读取缓冲区当前位置的值,然后使用get()java.nio.ByteBuffer类中的方法将其递增。此方法返回当前缓冲区位置上的值。另外,如果发生下溢情况,则抛出BufferUnderflowException。演示此的程序如下所示-示例import java.nio.*;import java.util.*;…

自学python编程基础科学计算_Python基础与科学计算常用方法

Python基础与科学计算常用方法本文使用的是Jupyter Notebook,Python3。你可以将代码直接复制到Jupyter Notebook中运行,以便更好的学习。导入所需要的头文件import numpy as npimport numpy as npimport matplotlib as mplfrom mpl_toolkits.mplot3d imp…

php中删除文件夹内容吗,如何使用PHP删除包含内容的文件夹

小编典典此功能将允许您删除任何文件夹(只要可写)及其文件和子目录。function Delete($path){if (is_dir($path) true){$files array_diff(scandir($path), array(., ..));foreach ($files as $file){Delete(realpath($path) . / . $file);}return rmdir($path);}else if (is…

php多维数组删除指定元素,如何删除多维数组中指定元素?

[0] > Array ( [v] > 1 [fup] > 0 [n] > 服务器 [s] > Array ( [0] > Array ( [v] > 2 [fup] > 2 [n] > one [s] > Array ( [0] > Array ( [v] > 3 [fup] > 41 [n] > one ) [1] > Array ( [v] > 4 [fup] > 1 [n] > two …

python有趣的简单代码_简单几步,100行代码用Python画一个蝙蝠侠的logo

转自:菜鸟学Python蝙蝠侠作为DC漫画的核心人物之一,一直都受到广大粉丝的喜爱,而笔者作为DC的铁杆粉丝,自然也是老爷(粉丝对蝙蝠侠的昵称)的支持者。今天,笔者就用Python来画一个蝙蝠侠的logo,大概就是下图…