java怎么把数据返回给客户端_java 服务器怎样给客户端传输数据
服务器端源码:
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;
/**
*
* 文件名:ServerReceive.java
* 实现功能:作为服务器接收客户端发送的文件
*
* 具体实现过程:
* 1、建立SocketServer,等待客户端的连接
* 2、当有客户端连接的时候,按照双方的约定,这时要读取一行数据
* 其中保存客户端要发送的文件名和文件大小信息
* 3、根据文件名在本地创建文件,并建立好流通信
* 4、循环接收数据包,将数据包写入文件
* 5、当接收数据的长度等于提前文件发过来的文件长度,即表示文件接收完毕,关闭文件
* 6、文件接收工作结束
public class ServerReceive {
public static void main(String[] args) {
/**与服务器建立连接的通信句柄*/
ServerSocket ss = null;
Socket s = null;
/**定义用于在接收后在本地创建的文件对象和文件输出流对象*/
File file = null;
FileOutputStream fos = null;
/**定义输入流,使用socket的inputStream对数据包进行输入*/
InputStream is = null;
/**定义byte数组来作为数据包的存储数据包*/
byte[] buffer = new byte[4096 * 5];
/**用来接收文件发送请求的字符串*/
String comm = null;
/**建立socekt通信,等待服务器进行连接*/
try {
ss = new ServerSocket(4004);
s = ss.accept();
} catch (IOException e) {
e.printStackTrace();
}
/**读取一行客户端发送过来的约定信息*/
try {
InputStreamReader isr = new InputStreamReader(s.getInputStream());
BufferedReader br = new BufferedReader(isr);
comm = br.readLine();
} catch (IOException e) {
System.out.println("服务器与客户端断开连接");
}
/**开始解析客户端发送过来的请求命令*/
int index = comm.indexOf("/#");
/**判断协议是否为发送文件的协议*/
String xieyi = comm.substring(0, index);
if(!xieyi.equals("111")){
System.out.println("服务器收到的协议码不正确");
return;
}
/**解析出文件的名字和大小*/
comm = comm.substring(index + 2);
index = comm.indexOf("/#");
String filename = comm.substring(0, index).trim();
String filesize = comm.substring(index + 2).trim();
/**创建空文件,用来进行接收文件*/
file = new File(filename);
if(!file.exists()){
try {
file.createNewFile();
} catch (IOException e) {
System.out.println("服务器端创建文件失败");
}
}else{
/**在此也可以询问是否覆盖*/
System.out.println("本路径已存在相同文件,进行覆盖");
}
/**【以上就是客户端代码中写到的服务器的准备部分】*/
/**
* 服务器接收文件的关键代码*/
try {
/**将文件包装到文件输出流对象中*/
fos = new FileOutputStream(file);
long file_size = Long.parseLong(filesize);
is = s.getInputStream();
/**size为每次接收数据包的长度*/
int size = 0;
/**count用来记录已接收到文件的长度*/
long count = 0;
/**使用while循环接收数据包*/
while(count < file_size){
/**从输入流中读取一个数据包*/
size = is.read(buffer);
/**将刚刚读取的数据包写到本地文件中去*/
fos.write(buffer, 0, size);
fos.flush();
/**将已接收到文件的长度+size*/
count += size;
System.out.println("服务器端接收到数据包,大小为" + size);
}
} catch (FileNotFoundException e) {
System.out.println("服务器写文件失败");
} catch (IOException e) {
System.out.println("服务器:客户端断开连接");
}finally{
/**
* 将打开的文件关闭
* 如有需要,也可以在此关闭socket连接
* */
try {
if(fos != null)
fos.close();
} catch (IOException e) {
e.printStackTrace();
}//catch (IOException e)
}//finally
}//public static void main(String[] args)
}//public class ServerReceive
客户端源码:
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.OutputStream;
import java.io.PrintStream;
import java.net.Socket;
/**
*
* 文件名:ClientSend.java
* 实现功能:作为客户端向服务器发送一个文件
*
* 具体实现过程:
* 1、建立与服务器端的连接,IP:127.0.0.1, port:4004
* 2、将文件的名字和大小通过自定义的文件传输协议,发送到服务器
* 3、循环读取本地文件,将文件打包发送到数据输出流中
* 4、关闭文件,结束传输
*
* */
public class ClientSend {
public static void main(String[] args) {
/**与服务器建立连接的通信句柄*/
Socket s = null;
/**定义文件对象,即为要发送的文件
* 如果使用绝对路径,不要忘记使用'/'和'\'的区别
* 具体区别,请读者自行查询
* */
File sendfile = new File("API.CHM");
/**定义文件输入流,用来打开、读取即将要发送的文件*/
FileInputStream fis = null;
/**定义byte数组来作为数据包的存储数据包*/
byte[] buffer = new byte[4096 * 5];
/**定义输出流,使用socket的outputStream对数据包进行输出*/
OutputStream os = null;
/**检查要发送的文件是否存在*/
if(!sendfile.exists()){
System.out.println("客户端:要发送的文件不存在");
return;
}
/**与服务器建立连接*/
try {
s = new Socket("127.0.0.1", 4004);
}catch (IOException e) {
System.out.println("未连接到服务器");
}
/**用文件对象初始化fis对象
* 以便于可以提取出文件的大小
* */
try {
fis = new FileInputStream(sendfile);
} catch (FileNotFoundException e1) {
e1.printStackTrace();
}
/**首先先向服务器发送关于文件的信息,以便于服务器进行接收的相关准备工作
* 具体的准备工作,请查看服务器代码。
*
* 发送的内容包括:发送文件协议码(此处为111)/#文件名(带后缀名)/#文件大小
* */
try {
PrintStream ps = new PrintStream(s.getOutputStream());
ps.println("111/#" + sendfile.getName() + "/#" + fis.available());
ps.flush();
} catch (IOException e) {
System.out.println("服务器连接中断");
}
/**
* 此处睡眠2s,等待服务器把相关的工作准备好
* 也是为了保证网络的延迟
* 读者可自行选择添加此代码
* */
try {
Thread.sleep(2000);
} catch (InterruptedException e1) {
e1.printStackTrace();
}
/**之前的准备工作结束之后
* 下面就是文件传输的关键代码
* */
try {
/**获取socket的OutputStream,以便向其中写入数据包*/
os = s.getOutputStream();
/** size 用来记录每次读取文件的大小*/
int size = 0;
/**使用while循环读取文件,直到文件读取结束*/
while((size = fis.read(buffer)) != -1){
System.out.println("客户端发送数据包,大小为" + size);
/**向输出流中写入刚刚读到的数据包*/
os.write(buffer, 0, size);
/**刷新一下*/
os.flush();
}
} catch (FileNotFoundException e) {
System.out.println("客户端读取文件出错");
} catch (IOException e) {
System.out.println("客户端输出文件出错");
}finally{
/**
* 将打开的文件关闭
* 如有需要,也可以在此关闭socket连接
* */
try {
if(fis != null)
fis.close();
} catch (IOException e) {
System.out.println("客户端文件关闭出错");
}//catch (IOException e)
}//finally
}//public static void main(String[] args)
}//public class ClientSend
java怎么把数据返回给客户端_java 服务器怎样给客户端传输数据相关推荐
- java做服务器端给客户端传数据包_java 服务器怎样给客户端传输数据
展开全部 服务器端源码: import java.io.BufferedReader; import java.io.File; import java.io.FileNotFoundExceptio ...
- java 不存在数据返回的值是什么_Java方法
方法的概念 方法就是将功能重复的代码封装成一段独立的小程序,通过调用方法的方式以提高代码的复用性(减少代码重复) 复制代码 int year = 2020; if ( year % 4 == 0 &a ...
- TCP客户端显示服务器图片,TCP客户端显示服务器图片
TCP客户端显示服务器图片 内容精选 换一换 ELB的常见异常返回码有400.403.502.504等.若遇到这些返回码建议您先直接访问后端云服务器,查看是否是后端云服务器的异常.若后端云服务器响应正 ...
- 客户端和服务器的通信协议,客户端和服务器的通信协议
客户端和服务器的通信协议 内容精选 换一换 华为云帮助中心,为用户提供产品简介.价格说明.购买指南.用户指南.API参考.最佳实践.常见问题.视频帮助等技术文档,帮助您快速上手使用华为云服务. 在部署 ...
- 一个客户端多服务器系统,一个客户端多服务器系统吗
一个客户端多服务器系统吗 内容精选 换一换 业界对备份一致性的定义包括如下三类:不一致备份:备份的文件.磁盘不在同一个时间点.崩溃一致性备份:崩溃一致性备份会捕获备份时磁盘上已存在的数据,文件/磁盘数 ...
- 手机客户端与服务器通信协议,手机客户端与服务器通信协议
手机客户端与服务器通信协议 内容精选 换一换 云手游服务器适合云手游的场景,一台云手游服务器对应15个云手机实例.本文通过四个阶段构建入门级云手游系统.首先,您需要梳理对云手游的诉求,明确业务的应用场 ...
- qt之TCP/IP通信客户端与服务器自动连接互相传输数据
一.前言 在开发上位机软件,用的最多的通信就是网络通信,串口通信和USB通信,串口通信相对是最容易的,USB通信在前面的文章中也专门写了一个博客介绍USB HID通信方式,见链接:https://bl ...
- 微信是胖客户端瘦服务器,何为瘦客户端、胖客户端和富客户端?
瘦客户端(Thin Client): 指的是在客户端-服务器网络体系中的一个基本无需应用程序的计算机终端. 它通过一些协议和服务器通信,进而接入局域网.作为应用程序平台的Internet的到来为企业应 ...
- java怎么把数据返回给客户端_将数据从Servlet返回到Java客户端
您遇到了序列化问题.序列化是将某些数据转换为可以传输的格式的地方.有几种方法可以做到这一点,其他答案中提到了一些方法. 我建议使用JSON作为您的格式.你可以从json.org获得一个很好的Java ...
最新文章
- 自动释放池autoreleasepool
- 第十二章 支持向量机-机器学习老师板书-斯坦福吴恩达教授
- 级联分类器训练及其参数的含义
- POJ1724 ROADS 费用最短路
- 云原生之容器安全实践
- job每分钟执行 oracle_Oracle Job 每个时间点执行示例
- 【配置属性】—Entity Framework实例详解
- Intel Core Enhanced Core架构/微架构/流水线 (1) - 特性概述
- 使用OpenCV-python提取图片中的硬币
- Sutherland-Hodgeman多边形裁剪
- 正确的python变量名_Python变量的命名
- adb 驱动 fastboot 驱动 win10
- 定时任务,时间表达式
- Overriding managed version 问题解决
- 中国移动云mas短信对接(http)
- javascript数据类型,对象,继承及原型链
- 如何在百度地图、腾讯地图标注公司地址信息?
- 如何修改C盘下的用户名
- 如何做一个好的管理者
- jsp之bootstrap-datetimepicker日期插件
热门文章
- 每个公众号都需要一个社区小程序
- 单倍型基因组组装方法
- ZOJ - 4049 Halting Problem 题解【c++】
- pe中怎么卸载服务器系统更新,如何卸载win7系统更新用pe装win7
- ovn-controller转换流表
- jmeter第21讲 阿里云下载安装JDK并配置环境变量
- 怎么用命令改变legend在图中的位置
- luogu2791 幼儿园篮球题 第二类斯大林数(特)卡常NTT
- csv文档转为tsv文档-csv to tsv
- 注销苹果id 显示联系服务器时出现问题,帮您还原连接appleid服务器时出错
【图文介绍】的处理办法_...