注意点 :
- 传输文件时,为了知道文件传输是否结束,可以在报头中添加文件长度或者文件末尾添加结束标志 - 特殊进制符号等.(个人感觉还是文件长度或者说是文件长度 + 结束标志,比较可靠)
- 实际上的网络环境比较复杂,在公共网络的测试中,由于Server端网络较差,在传输过程中出现传输中断,有必要的情况下需要进行检查,避免出现无意义的等待和及时重新建立传输连接.
下面是一个简单的socket实现文件传输.
如果需要多个客户端接入,可以借助多线程,为每个连接创建一个线程去处理.
如果需要双向传递,建议设计一个swing界面,目的是为将文件的发送和文件的接收界面分开,不管是dos或者控制台都不会满足你对双向的使用.
Client.java
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.Socket;
import java.util.Date;
/**
* 数据组成 文件名 + 文件长度 + 文件内容
* @author pingguoliu
*
*/
public class Client {
public static void main(String[] args) throws IOException {
String filePath; // 发送文件路径
File file; // 文件对象
FileInputStream fis = null; // 文件输入流
long fileLength = 0; // 文件长度
String fileName; // 文件名
String ip; // 服务器地址
InetAddress inetAddress; // ip封装对象
Socket socket = null; // 套接字
OutputStream os = null; // socket输出流对象
DataOutputStream dos = null; // 封装socket输出流
System.out.println("开始传输时间 : " + new Date());
filePath = "/Users/pingguoliu/Downloads/小兵传奇.txt"; // 需要发送的文件
// filePath = "/Users/pingguoliu/Downloads/斗破苍穹.dmg";
// filePath