文档章节

Io流,多线程,网络编程的融合练习

大强森
 大强森
发布于 2017/04/28 21:27
字数 528
阅读 14
收藏 0
package doit;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.util.Timer;
import java.util.TimerTask;

//实现从客户端的东西传到服务端,同时从后台复制文件到指定目录
public class mainStart {
	static FileInputStream in = null;

	public static void main(String[] s) {
		File fin = new File("d:\\ThreadPrint.java");
		File fout = new File("e:\\ThreadPrint.java");
		FileD fd = new FileD(fin, fout);
		fd.writeCopy();
		try {
			in = new FileInputStream(fin);
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		}
		// 服务端启动
		new Thread(new Runnable() {
			public void run() {
				new ServerSocketD(9000).read();
			}
		}).start();
		// 客户端启动(体现一下延时的上传)
		new Timer().schedule(new TimerTask() {
			@Override
			public void run() {
				new SocketD("192.168.1.103", 9000, in).write();
			}
		}, 1000);
		// new Thread(new Runnable() {
		// @Override
		// public void run() {
		// new SocketD("192.168.1.103", 9000, in).write();// 客户端启动
		// }
		// }).start();

		fd.closeInputStream();
		fd.closeOutputStream();

	}
}

 

 

package doit;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

//文件操作类
public class FileD {
	BufferedOutputStream bo = null;
	BufferedInputStream bi = null;

	File in = null;

	FileD(File in, File out) {
		this.in = in;
		reset();
		try {
			bo = new BufferedOutputStream(new FileOutputStream(out));
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		}

	}

	// read
	public void read() {
		int len = 0;
		byte[] by = new byte[1024 * 9];
		try {
			while ((len = bi.read(by)) != -1) {
				System.out.println(new String(by, 0, len));
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
		reset();

	}

	// write
	public void writeCopy() {
		reset();
		int len = 0;
		byte[] by = new byte[1024 * 9];
		try {
			while ((len = bi.read(by)) != -1) {
				bo.write(by, 0, len);
				bo.flush();

			}
		} catch (IOException e) {
			e.printStackTrace();
		}
		reset();

	}

	// reset()重置bi输入流
	public void reset() {
		try {
			bi = new BufferedInputStream(new FileInputStream(in));
		} catch (FileNotFoundException e1) {
			e1.printStackTrace();
		}
	}

	// 自定义关闭输入流
	public void closeInputStream() {
		try {
			bi.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	// 自定义关闭输出流
	public void closeOutputStream() {
		try {
			bo.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

}

 

package doit;

import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;

//服务端类

public class ServerSocketD {
	ServerSocket ss = null;
	Socket s = null;

	ServerSocketD(int port) {
		try {
			ss = new ServerSocket(port);
			s = ss.accept();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	// 数据来源

	public void read() {
		InputStream in = null;
		try {
			in = s.getInputStream();
		} catch (IOException e1) {
			e1.printStackTrace();
		}

		while (true) {
			int len = 0;
			byte[] by = new byte[1024 * 9];
			try {
				while ((len = in.read(by)) != -1) {
					System.out.println(new String(by, 0, len));
				}
			} catch (IOException e) {
				e.printStackTrace();
			}

		}
	}

}

 

package doit;

import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;

public class SocketD {
	Socket s = null;
	FileInputStream in = null;
	OutputStream out = null;

	public SocketD(String inet, int port, FileInputStream in) {
		try {
			s = new Socket(inet, port);
		} catch (UnknownHostException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		this.in = in;

	}

	//
	public void write() {
		try {
			out = s.getOutputStream();
		} catch (IOException e1) {
			e1.printStackTrace();
		}
		int len = 0;
		byte[] by = new byte[1024 * 9];
		try {
			while ((len = in.read(by)) != -1) {
				out.write(new String(by, 0, len).getBytes());
				out.flush();
			}
		} catch (IOException e) {
			e.printStackTrace();
		}

	}

}

 

© 著作权归作者所有

大强森
粉丝 2
博文 24
码字总数 9681
作品 0
奉贤
程序员
私信 提问
java学习计划

源于传智播客毕向东老师的教学计划: day01-01-基本常识 day01-02-Java的跨平台性 day01-03-Java环境搭建(安装) day01-04-Java环境搭建(环境变量配置) day01-05-Java环境搭建(环境变量配置技...

Bony
2016/05/14
41
0
新手如何快速打好java基础?

要打好基础,首先要知道学什么,然后有牛的老师带,然后疯狂练习。练习的时候也不能盲目练习,需要有反馈,不断增加难度,这样才能学好。最好全身心投入学习。 下面这份挺全的java基础大纲,...

JAVA大神
2017/12/01
0
0
JavaSE和JavaEE的起步学习路线

Java javaSE部分 1)能够掌握DOS系统常用基本命令; 2)熟练使用eclipse编写java代码; 3)掌握常用数据结构和算法; 4)掌握常用的编程设计模式; 5)熟练使用java语言的常用对象; 6)使用java编...

Jasonisoft
2016/05/18
0
0
Redis单线程优势

简介 Redis采用的是基于内存的采用的是单进程单线程模型的KV数据库,由C语言编写。官方提供的数据是可以达到100000+的qps。这个数据不比采用单进程多线程的同样基于内存的KV数据库Memcached...

沈渊
2017/11/12
0
0
Java Socket编程----通信是这样炼成的

Java最初是作为网络编程语言出现的,其对网络提供了高度的支持,使得客户端和服务器的沟通变成了现实,而在网络编程中,使用最多的就是Socket。像大家熟悉的QQ、MSN都使用了Socket相关的技术...

浮躁的码农
2017/11/07
0
0

没有更多内容

加载失败,请刷新页面

加载更多

C# 视频多人脸识别的实现过程

整个项目是用虹软技术完成开发 上一篇内容的调整,提交到git了,https://github.com/catzhou2002/ArcFaceDemo 基本思路如下: 一、识别线程 1.获取当前图片 2.识别当前图片的人脸位置,并将结...

是哇兴哥棒棒哒
22分钟前
1
0
Spring Cloud Eureka 你还在让它裸奔吗??

前些天栈长在微信公众号Java技术栈分享了 Spring Cloud Eureka 最新版 实现注册中心的实战教程:Spring Cloud Eureka 注册中心集群搭建,Greenwich 最新版!,成功进入 Eureka 控制台页面。 ...

Java技术栈
39分钟前
1
0
linux gyp ERR! stack Error: EACCES: permission denied, mkdir ‘xxx’

在使用linux npm install的出现这个错误了,百度了下,没有权限加个参数即可 npm install --unsafe-perm

朝如青丝暮成雪
40分钟前
1
0
使用kubeadm 搭建K8s集群

1. 参考官网 https://kubernetes.io/docs/setup/independent/install-kubeadm/

whhbb
今天
2
0
Dubbo 3.0 !提升不止一点点!

Dubbo 自 2011 年 10 月 27 日开源后,已被许多非阿里系的公司使用,其中既有当当网、网易考拉等互联网公司,也不乏中国人寿、青岛海尔等大型传统企业。 自去年 12 月开始,Dubbo 3.0 便已正...

编程SHA
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部