Java Socket 传输文件1



服务器端实现代码:

import java.io.*;

import java.net.*;



public class FileServer{

   public static void main(String[] args)throws Exception{

      //创建文件流用来读取文件中的数据

      File file=new File("lishengjie.jpg");

      FileInputStream fos=new FileInputStream(file);

      //注意这里使用的是字节流,因为图像信息可以用二进制传输

    

      //创建网络服务器接受客户请求

      ServerSocket ss=new ServerSocket(3108);

      Socket client=ss.accept();

    

      //创建网络输出流并提供数据包装器

      OutputStream netOut=client.getOutputStream();

      OutputStream doc=new DataOutputStream(new BufferedOutputStream(netOut));

    

      //创建文件读取缓冲区

      byte[] buf=new byte[2048];

      int num=fos.read(buf);

      while(num!=(-1)){//是否读完文件

         doc.write(buf,0,num);//把文件数据写出网络缓冲区

         doc.flush();//刷新缓冲区把数据写往客户端

         num=fos.read(buf);//继续从文件中读取数据

      }

      fos.close();

      doc.close();

   }

}



客户方实现代码:

import java.io.*;

import java.net.*;



public class FileClient{

   public static void main(String[] args)throws Exception{

      //使用本地文件系统接受网络数据并存为新文件

      File file=new File("newFile.jpg");

      file.createNewFile();

      RandomAccessFile raf=new RandomAccessFile(file,"rw");

    

      // 通过Socket连接文件服务器

      Socket server=new Socket(InetAddress.getLocalHost(),3108);

    

      //创建网络接受流接受服务器文件数据

      InputStream netIn=server.getInputStream();

      InputStream in=new DataInputStream(new BufferedInputStream(netIn));

    

      //创建缓冲区缓冲网络数据

      byte[] buf=new byte[2048];

      int num=in.read(buf);

    

      while(num!=(-1)){//是否读完所有数据

         raf.write(buf,0,num);//将数据写往文件

         raf.skipBytes(num);//顺序写文件字节

         num=in.read(buf);//继续从网络中读取文件

      }

      in.close();

      raf.close();

   }

}

你可能感兴趣的:(java)