Java 基于TCP Socket 实现文件上传

文件上传过程一个单向Socket通信过程。客户端通过文件输入流读取文件,然后从Socket获取输出流写入数据。服务端从Socket中获得输入流,然后写入文件输出流,写入数据完成则上传完成。

服务端UploadServer:

public class UplaodServer {
  public static void main(String []args){
    try(
      // 创建一个ServerSocket监听8080端口的请求
      // ServerSocket 实现了 AutoCloseable接口, 可以自动释放资源
    	ServerSocket server = new ServerSocket(8080);
      // accept()会阻塞当前线程, 等待客户端请求
      Socket socket = server.accept();
      // 获取输入流
      BufferedInputStream in = new BufferedInputStream(socket.getInputStream());
      // 由文件输出流创建缓冲输出流, 写入本地upload.jpg 文件
      FileOutputStream outputStream = new FileOutputStream("./upload.jpg")
    ){
      // 缓冲区
      byte [] buffer = new byte[1024];
      int len = in.read(buffer);
      while(len != -1){
        // 写入数据到文件
        outputStream.write(buffer, 0, len);
        // 再次从Socket中读取数据
        len = in.read(buffer);
      }
      System.out.println("文件已上传");
    }catch (IOException e) {
      e.printStackTrace();
    }
  }
}

客户端UploadClient:

public class UploadClient {
  public static void main(String []args){
    try(
    	// Socket 实现了 AutoCloseable接口 可自动关闭资源
      Socket socket = new Socket("127.0.0.1", 8080);
       // 又Socket获得输出流, 并创建缓冲输出流
      BufferedOutputStream out = new BufferedOutputStream(socket.getOutputStream());
      FileInputStream fileInput = new FileInputStream("F:\file\oxx6j5.jpg");
      // 由文件输入流创建缓冲输入流
      BufferedInputStream in = new BufferedInputStream(fileInputStream);
    ){
       // 准备缓冲区
      byte[] buffer = new byte[1024];
      int len = in.read(buffer);
      while (len != -1) {
        // 写入Socket
        out.write(buffer, 0, len);
        // 再次读取文件
        len = in.read(buffer);
      }
      System.out.println("上传成功!");
    }catch (ConnectException e) {
      System.out.println("服务器未启动");
      e.printStackTrace();
    } catch (IOException e) {
      e.printStackTrace();
    }
  }
}

注意

server.accept()会阻塞线程,所以最好把server.accept()语句放入子线程中。

以上就是Java 基于TCP Socket 实现文件上传的详细内容,更多关于Java 文件上传的资料请关注我们其它相关文章!

(0)

相关推荐

  • Java Socket编程实例(一)- TCP基本使用

    一.服务端代码: import java.net.*; // for Socket, ServerSocket, and InetAddress import java.io.*; // for IOException and Input/OutputStream public class TCPEchoServer { private static final int BUFSIZE = 32; // Size of receive buffer public static void main

  • Java通过 Socket 实现 TCP服务端

    1 Java Socket简介 所谓socket 通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄.应用程序通常通过"套接字"向网络发出请求或者应答网络请求.Socket和ServerSocket类库位于Java.NET包中.ServerSocket用于服务器端,Socket是建立网络连接时使用的.在连接成功时,应用程序两端都会产生一个Socket实例,操作这个实例,完成所需的会话.对于一个网络连接来说,套接字是平等的,并没有差别,不因为在服务器端或

  • java实现一个简单TCPSocket聊天室功能分享

    本文实例为大家分享了java实现TCPSocket聊天室功能的相关代码,供大家参考,具体内容如下 1.TCPserver.java import java.net.*; import java.io.*; import java.util.*; import java.util.concurrent.*; public class TCPserver{ private static final int SERVERPORT = 8888; private ServerSocket MyServe

  • Java编程实现基于TCP协议的Socket聊天室示例

    本文实例讲述了Java编程实现基于TCP协议的Socket聊天室.分享给大家供大家参考,具体如下: 这里使用Socket套接字进行编程,完成的是基于TCP可靠服务实现服务器与客户端的双通信. Server服务器端: package com.han; import java.awt.Container; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.Win

  • java实现基于Tcp的socket聊天程序

    对于步入编程行业不深的初学者或是已经有所领会的人来说,当学习一项新的技术的时候,非常渴望有一个附上注释完整的Demo.本人深有体会,网上的例子多到是很多,但是很杂不完整,写代码这种东西来不得半点马虎,要是错了一点,那也是运行不了的.这对于初学者来说更加的头疼,因为他根本不知道错在哪里,盲目的改只能错上加错.最后不得不去找找看看有没有能够直接运行的例子再加以模仿. 下面是博主在学习Java的socket时写的一个完整的例子,并且带上了完整的注释.它是一个简单的聊天程序,但是它可以设置任意多用户同时

  • JAVA实现基于Tcp协议的简单Socket通信实例

    好久没写博客了,前段时间忙于做项目,耽误了些时间,今天开始继续写起~ 今天来讲下关于Socket通信的简单应用,关于什么是Socket以及一些网络编程的基础,这里就不提了,只记录最简单易懂实用的东西.  1.首先先来看下基于TCP协议Socket服务端和客户端的通信模型: Socket通信步骤:(简单分为4步) 1.建立服务端ServerSocket和客户端Socket 2.打开连接到Socket的输出输入流 3.按照协议进行读写操作 4.关闭相对应的资源 2.相关联的API: 1.首先先来看下

  • Java实现Socket的TCP传输实例

    本文实例讲述了Java实现Socket的TCP传输.分享给大家供大家参考.具体分析如下: 客户端发数据到服务端 * Tcp传输,客户端建立的过程. * 1,创建tcp客户端socket服务.使用的是Socket对象. * 建议该对象一创建就明确目的地.要连接的主机. * 2,如果连接建立成功,说明数据传输通道已建立. * 该通道就是socket流 ,是底层建立好的. 既然是流,说明这里既有输入,又有输出. * 想要输入或者输出流对象,可以找Socket来获取. * 可以通过getOutputSt

  • Java多线程实现TCP网络Socket编程(C/S通信)

    开篇必知必会 在前一篇<基于TCP协议网络socket编程(java实现C/S通信)>,实际存在一个问题,如果服务器端在建立连接后发送多条信息给客户端,客户端是无法全部接收的,原因在于客户端为单线程,只接受了第一条信息,剩余信息阻塞等待下一次发送.所以,这造成了客户端无法处理消息队列,每次只接收并输出一条服务器信息,出现信息不同步问题. 本篇将解决这个问题,详细记录实现java多线程通信,目标是使客户端可以一次接收服务器发送的多条信息,避免阻塞.方法是将客户端接收信息功能独立为一个线程来完成,

  • Java Socket编程实例(四)- NIO TCP实践

    一.回传协议接口和TCP方式实现: 1.接口: import java.nio.channels.SelectionKey; import java.io.IOException; public interface EchoProtocol { void handleAccept(SelectionKey key) throws IOException; void handleRead(SelectionKey key) throws IOException; void handleWrite(

  • java实现基于TCP协议网络socket编程(C/S通信)

    一.前言:TCP原理简介 首先,保证文章完整性,TCP的理论原理还是需要简介一下,略显枯燥๑乛◡乛๑. TCP(传输控制协议,Transmission Control Protocol)是一种面向连接的.可靠的.基于字节流的传输层通信协议.TCP旨在适应支持多网络应用的分层协议层次结构.也就是说,TCP是为了在不可靠的互联网络上提供可靠的端到端字节流而专门设计的一个传输协议. 连接到不同但互连的计算机通信网络的主计算机中的成对进程之间依靠TCP提供可靠的通信服务. 以上TCP的特点,也正是与UD

随机推荐