100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > TCP实现多线程下文件的上传

TCP实现多线程下文件的上传

时间:2018-09-01 12:53:31

相关推荐

TCP实现多线程下文件的上传

多线程下文件的上传:

要想实现此需求,我们首先要掌握多线程的相关知识【线程的的实现方法】、以及用IO流进行数据的传输和用TCP协议发送和接收数据。

模拟多线程下文件的上传的客户端

技术分析:客户端我们使用Socket类【套接字】提供的方法

【重点实现思路】

run方法:

1、创建套接字对象【Socket】---参数服务端的ip和port;

2、创建输入流对象--读取磁盘文件的数据到内存;

3、获取输出流对象--将内存中的数据写出【while边读边写】;

4、提示服务端数据传输完成;

5、等待接收服务器端返回的结果;

6、将结果打印到控制台;

7、关闭输入流和Socket;’

8、main方法中启动线程

main方法:

package com.tlc.text;/*** @auther 喵了个@汪* 客户端*/public class TCPImgSend {public static void main(String[] args) {//创建5个线程用来传输文件,并开启线程new ImgUpload("1.jpeg").start();new ImgUpload("2.jpeg").start();new ImgUpload("3.jpeg").start();new ImgUpload("4.jpeg").start();new ImgUpload("5.jpeg").start();}}

客户端--线程任务实现:

package com.tlc.text;/*** @auther * 线程任务--上传数据端*/import java.io.FileInputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import .InetAddress;import .Socket;public class ImgUpload extends Thread {//属性--文件名private String imgName;public ImgUpload(String imgName) {this.imgName = imgName;}public String getImgName() {return imgName;}public void setImgName(String imgName) {this.imgName = imgName;}@Overridepublic void run() {//创建客户端套接字对象Socket socket = null;//创建输入流对象,获取磁盘的文件FileInputStream fis = null;try {socket = new Socket(InetAddress.getLocalHost(), 6666);fis = new FileInputStream("Item/mm/miao/" + imgName);//获取输出流传输数据OutputStream os = socket.getOutputStream();//while循环实现边读边写int len;while((len = fis.read()) != -1) {os.write(len);}//提示服务器传输完成socket.shutdownOutput();//接收服务器返回的结果InputStream is = socket.getInputStream();//创建字节数组byte[] bytes = new byte[1024];int len1 = is.read(bytes);//将服务器返回的结果打印到控制台System.out.println(new String(bytes, 0, len1));} catch (IOException e) {e.printStackTrace();}finally {if(fis != null) {//关闭io输入流try {fis.close();} catch (IOException e) {e.printStackTrace();}}if(socket != null) {try {//关闭套接字socket.close();} catch (IOException e) {e.printStackTrace();}}}}}

模拟多线程下文件的上传的服务器端:

1、创建套接字对象【ServerSocket】---参数port;

2、使用while循环实现多文件上传的线程分配;

3、监测客户端的套接字对象;

4、获取输入流读取上传的文件;

5、输出流写入磁盘文件;

6、客户端上传完毕,提示上传成功

package com.tlc.text;/*** @auther 喵了个@汪* 接收数据的服务端*/import java.io.*;import .ServerSocket;import .Socket;import java.util.UUID;public class TCPImgReceive {public static void main(String[] args) {//创建套接字对象ServerSocket socket = null;try {socket = new ServerSocket(6666);} catch (IOException e) {e.printStackTrace();}//while循环实现多文件传输的线程分配while (true) {try {//检测客户端的套接字Socket detection = socket.accept();new Thread() {@Overridepublic void run() {//获取读取数据的输入流InputStream is = null;//获取写出磁盘的输出流FileOutputStream fos = null;try {is = detection.getInputStream();//读取传输过来的文件写入指定的位置fos = new FileOutputStream("Item/mm/" + UUID.randomUUID() + ".jpg");//边读边写进行数据的传输int len;while ((len = is.read()) != -1) {fos.write(len);}//数据传输完毕回复客户端OutputStream os = detection.getOutputStream();os.write("数据传输成功!".getBytes());} catch (IOException e) {e.printStackTrace();}}}.start();} catch (IOException e) {e.printStackTrace();}}}}

以上代码可以进行参考,但是如果想要完成以上案例,最好先掌握基本的知识点【TCP、多线程】,这样才能理解每个步骤,代码的实现逻辑才会一目了然。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。