java socket传送文件

java socket传送文件,第1张

客户端代码如下:

import java.io.DataOutputStream  

import java.io.File  

import java.io.FileInputStream  

import java.io.IOException  

import java.net.InetSocketAddress  

import java.net.Socket  

  

/** 

 * 文件发送客户端主程序 

 * @author admin_Hzw 

 * 

 */  

public class BxClient {  

      

    /** 

     * 程序main方法 

     * @param args 

     * @throws IOException 

     */  

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

        int length = 0  

        double sumL = 0   

        byte[] sendBytes = null  

        Socket socket = null  

        DataOutputStream dos = null  

        FileInputStream fis = null  

        boolean bool = false  

        try {  

            File file = new File("D:/天啊.zip") //要传输的文件路径  

            long l = file.length()   

            socket = new Socket()    

            socket.connect(new InetSocketAddress("127.0.0.1", 48123))  

            dos = new DataOutputStream(socket.getOutputStream())  

            fis = new FileInputStream(file)        

            sendBytes = new byte[1024]    

            while ((length = fis.read(sendBytes, 0, sendBytes.length)) > 0) {  

                sumL += length    

                System.out.println("已传输:"+((sumL/l)*100)+"%")  

                dos.write(sendBytes, 0, length)  

                dos.flush()  

            }   

            //虽然数据类型不同,但JAVA会自动转换成相同数据类型后在做比较  

            if(sumL==l){  

                bool = true  

            }  

        }catch (Exception e) {  

            System.out.println("客户端文件传输异常")  

            bool = false  

            e.printStackTrace()    

        } finally{    

            if (dos != null)  

                dos.close()  

            if (fis != null)  

                fis.close()     

            if (socket != null)  

                socket.close()      

        }  

        System.out.println(bool?"成功":"失败")  

    }  

}

服务端代码如下:

import java.io.DataInputStream  

import java.io.File  

import java.io.FileOutputStream  

import java.io.IOException  

import java.net.ServerSocket  

import java.net.Socket  

import java.util.Random  

import com.boxun.util.GetDate  

  

  

/** 

 * 接收文件服务 

 * @author admin_Hzw 

 * 

 */  

public class BxServerSocket {  

      

    /** 

     * 工程main方法 

     * @param args 

     */  

    public static void main(String[] args) {  

        try {  

            final ServerSocket server = new ServerSocket(48123)  

            Thread th = new Thread(new Runnable() {  

                public void run() {  

                    while (true) {  

                        try {    

                            System.out.println("开始监听...")  

                            /* 

                             * 如果没有访问它会自动等待 

                             */  

                            Socket socket = server.accept()  

                            System.out.println("有链接")  

                            receiveFile(socket)  

                        } catch (Exception e) {  

                            System.out.println("服务器异常")  

                            e.printStackTrace()  

                        }  

                    }  

                }  

            })  

            th.run() //启动线程运行  

        } catch (Exception e) {  

            e.printStackTrace()  

        }       

    }  

  

    public void run() {  

    }  

  

    /** 

     * 接收文件方法 

     * @param socket 

     * @throws IOException 

     */  

    public static void receiveFile(Socket socket) throws IOException {  

        byte[] inputByte = null  

        int length = 0  

        DataInputStream dis = null  

        FileOutputStream fos = null  

        String filePath = "D:/temp/"+GetDate.getDate()+"SJ"+new Random().nextInt(10000)+".zip"  

        try {  

            try {  

                dis = new DataInputStream(socket.getInputStream())  

                File f = new File("D:/temp")  

                if(!f.exists()){  

                    f.mkdir()    

                }  

                /*   

                 * 文件存储位置   

                 */  

                fos = new FileOutputStream(new File(filePath))      

                inputByte = new byte[1024]     

                System.out.println("开始接收数据...")    

                while ((length = dis.read(inputByte, 0, inputByte.length)) > 0) {  

                    fos.write(inputByte, 0, length)  

                    fos.flush()      

                }  

                System.out.println("完成接收:"+filePath)  

            } finally {  

                if (fos != null)  

                    fos.close()  

                if (dis != null)  

                    dis.close()  

                if (socket != null)  

                    socket.close()   

            }  

        } catch (Exception e) {  

            e.printStackTrace()  

        }  

    }  

}

通过socket可以用如下方式进行。

1.启动服务端代码。

2.启动客户端自动连接服务端。

3.服务端上传文件,保存文件和路径。

4.将路径发送给连接服务端的客户端。

java中用socket一次传多个文件,参考思路如下:

1、把线程放到Vector 线程池里面;

2 、每次从Vector里面拿到第一个空闲的,如果没有,就新建一个线程,并保存到线程池, 线程状态为使用中;

3 、线程完毕后,通知管理类,管理类把线程标识为空闲;

可以封装为简单的方法,如下:

public MyThread getFreeThread(){

.. // 从池里面获取一个空闲线程

}

public void finished(MyThread o){

// 线程通知管理类,我已经完成了

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/7916772.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-11
下一篇 2023-04-11

发表评论

登录后才能评论

评论列表(0条)

保存