梦想飞翔

自强不息
posts - 111, comments - 30, trackbacks - 0, articles - 0
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

Java实现Socket发送和接收文件的代码

Posted on 2009-09-10 20:34 love1563 阅读(1000) 评论(0)  编辑  收藏
/** 
 * 发送端 
 */ 
class Client {  
   
    // 网上抄来的,将 int 转成字节  
    public static byte[] i2b(int i) {  
        return new byte[]{  
                (byte) ((i >> 24) & 0xFF),  
                (byte) ((i >> 16) & 0xFF),  
                (byte) ((i >> 8) & 0xFF),  
                (byte) (i & 0xFF)  
        };  
    }  
   
    /** 
     * 发送文件。文件大小不能大于 {@link Integer#MAX_VALUE} 
     * 
     * @param hostname 接收端主机名或 IP 地址 
     * @param port     接收端端口号 
     * @param filepath 文件路径 
     * 
     * @throws IOException 如果读取文件或发送失败 
     */ 
    public void sendFile(String hostname, int port, String filepath) throws IOException {  
        File file = new File(filepath);  
        FileInputStream is = new FileInputStream(filepath);  
   
        Socket socket = new Socket(hostname, port);  
        OutputStream os = socket.getOutputStream();  
   
        try {  
            int length = (int) file.length();  
            System.out.println("发送文件:" + file.getName() + ",长度:" + length);  
   
            // 发送文件名和文件内容  
            writeFileName(file, os);  
            writeFileContent(is, os, length);  
        } finally {  
            os.close();  
            is.close();  
        }  
    }  
   
    // 输出文件内容  
    private void writeFileContent(InputStream is, OutputStream os, int length) throws IOException {  
        // 输出文件长度  
        os.write(i2b(length));  
   
        // 输出文件内容  
        byte[] buffer = new byte[4096];  
        int size;  
        while ((size = is.read(buffer)) != -1) {  
            os.write(buffer, 0, size);  
        }  
    }  
   
    // 输出文件名  
    private void writeFileName(File file, OutputStream os) throws IOException {  
        byte[] fn_bytes = file.getName().getBytes();  
   
        os.write(i2b(fn_bytes.length));         // 输出文件名长度  
        os.write(fn_bytes);    // 输出文件名  
    }  

本文来自: IT知道网(http://www.itwis.com) 详细出处参考:http://www.itwis.com/html/java/j2se/20090304/3503_2.html

只有注册用户登录后才能发表评论。


网站导航: