新主题持续调试中,若有任何问题或建议可以{点我进入留言板}进行说明,感谢您的支持!

Java-TCP协议数据传输案例之文件上传

3,017次阅读
9条评论

TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议,由IETF的RFC 793定义。在简化的计算机网络OSI模型中,它完成第四层传输层所指定的功能,用户数据报协议(UDP)是同一层内,另一个重要的传输协议。在因特网协议族(Internet protocol suite)中,TCP层是位于IP层之上,应用层之下的中间层。不同主机的应用层之间经常需要可靠的、像管道一样的连接,但是IP层不提供这样的流机制,而是提供不可靠的包交换。


Java-TCP协议数据传输案例之文件上传

正文

在上一篇《Java-UDP协议数据传输简单小案例》文章使用了UDP协议进行数据传输展示,UDP协议是一种不可靠的传输协议,因为再数据发送之后,我们是无法得知其是否安全完整到达的。

TCP协议文章开头已经介绍了,是一种可靠的基于字节流的传输层通信协议,可靠之处在哪里呢?具体请详见TCP (传输控制协议),另外HTTP协议就是一个很好的例子。

发送端

import java.io.*;
import java.net.Socket;

public class ClientDemo2 {
    public static void main(String[] args) {
        String path = "F:"+ File.separator+"test"+ File.separator+"1.jpg";
        File file = new File(path);
        try {
            Socket socket = new Socket("127.0.0.1",5555);
            OutputStream out  = socket.getOutputStream();
            InputStream in = new FileInputStream(file);
            int len = 0;
            byte[] b = new byte[200];
            while ((len = in.read(b))!=-1){
                out.write(b,0,len);
            }
            in.close();
            out.close();
            socket.close();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }
}

服务端

import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
import java.security.MessageDigest;
import java.text.SimpleDateFormat;
import java.util.Date;

public class ServerDemo2 {
    public static void main(String[] args) {
        try {

            ServerSocket serverSocket = new ServerSocket(5555);
            while(true){
                Socket socket = serverSocket.accept();
                new Thread(new Save(socket)).start();
            }

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

    }
}

class Save implements Runnable{
    private Socket s = null;
    public Save(Socket s) {
        this.s = s;
    }

    @Override
    public void run() {
        String path = "F:"+ File.separator+"test"+ File.separator+"serverImg"+ File.separator;
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMddHHmmsssss");
        File isPath = new File(path);
        if(!isPath.exists() || !isPath.isDirectory()){
            isPath.mkdir();
        }
        try {
            InputStream in = s.getInputStream();
            byte[] b = new byte[200];
            String fileName = Tools.MD5(simpleDateFormat.format(new Date()));
            String filePath = path+fileName+".jpg";
            OutputStream out = new FileOutputStream(filePath);
            int len = 0;
            while((len = in.read(b))!=-1){
                out.write(b,0,len);
            }
            out.close();
            in.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
abstract class Tools{
    public final static String MD5(String pwd) {
        char md5String[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
                'A', 'B', 'C', 'D', 'E', 'F' };
        try {
            byte[] btInput = pwd.getBytes();
            MessageDigest mdInst = MessageDigest.getInstance("MD5");
            mdInst.update(btInput);
            byte[] md = mdInst.digest();
            int j = md.length;
            char str[] = new char[j * 2];
            int k = 0;
            for (int i = 0; i < j; i++) {   //  i = 0
                byte byte0 = md[i];  //95
                str[k++] = md5String[byte0 >>> 4 & 0xf];    //    5
                str[k++] = md5String[byte0 & 0xf];   //   F
            }
            return new String(str);

        } catch (Exception e) {
            return null;
        }
    }
}

[v_blue]在上方的服务器端中,为了避免文件名重复而造成文件被覆盖,采用了获取当前的时间(也可以更换成时间戳),然后再进行MD5加密使用32位密文进行命名,因为时间精确到了毫秒,一般都不会出现重名的现象。[/v_blue]

4
憧憬Licoy
版权声明:本站原创文章,由憧憬Licoy于2016年10月26日发表,共计4442字。
转载提示:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
评论(9条评论)
Loading...
英语论文代写 评论达人LV.1
2017-01-23 20:48:55 回复

感谢楼主的分享

Koolight 评论达人LV.3
2016-11-09 09:24:23 回复

技术流文章,看不懂了啊!

ewewq 评论达人LV.1
2016-10-29 14:28:34 回复

虽然完全看不懂,但必须得支持!

澳门银座 评论达人LV.1
2016-10-27 23:11:37 回复

顶顶顶顶顶顶顶顶顶顶 非常不错 http://www.aomenyinzuo.cn

小萝博客 评论达人LV.2
2016-10-27 07:59:29 回复

很久没来露脸了