`

java socket 传输文件

    博客分类:
  • JAVA
阅读更多

客户端:

 

package com.sun;

 

import java.io.BufferedInputStream;

import java.io.DataInputStream;

import java.io.File;

import java.io.InputStream;

import java.io.RandomAccessFile;

import java.net.InetAddress;

import java.net.Socket;

 

public class FileClient {

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

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

File file = new File("d:\\def.doc");

file.createNewFile();//地创建一个新的空文件

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

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

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

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

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();

}

}


服务端:

 

package com.sun;

 

import java.io.BufferedOutputStream;

import java.io.DataOutputStream;

import java.io.File;

import java.io.FileInputStream;

import java.io.OutputStream;

import java.net.ServerSocket;

import java.net.Socket;

 

public class FileServer {

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

 

String fileName = "d:\\abc.doc";

File file = new File(fileName);// 创建文件流用来读取文件中的数据

FileInputStream fos = new FileInputStream(file);

ServerSocket ss = new ServerSocket(60000);// 创建网络服务器接受客户请求

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();

}

}


分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics