标题:Socket如何传送多个文件??
只看楼主
longrm
Rank: 1
等 级:新手上路
帖 子:129
专家分:0
注 册:2007-6-18
 问题点数:0 回复次数:4 
Socket如何传送多个文件??
我写了一个传送多个文件的程序,可结果却是把多个文件都写在一个文件里去了,请问如何把文件分开来写入??

主要代码如下:

server:
程序代码:
    public void run() {
        try {
            // get out and in stream
            DataOutputStream dout = new DataOutputStream(s.getOutputStream());
            DataInputStream din = new DataInputStream(s.getInputStream());
            dout.writeUTF("{FileList}" + fileList);
            FileInputStream fis;
            DataInputStream dataIn;
            int length = 0;
            ta.append(din.readUTF() + "\n");
            state = "send";
            
            // send file one by one
            for(File f : fileList) {                
                dout.writeUTF("{FileBegin}" + f);
                fis = new FileInputStream(f);
                dataIn = new DataInputStream(fis);
                byte[] buffer = new byte[1024];// 定义一byte类型的缓冲区

                // send buffer length once
                ta.append("File:  " + f + " send begin!\n");
                while ((length = dataIn.read(buffer)) != -1) {
                    dout.write(buffer, 0, length);
                }
                ta.append("File:  " + f + " send end!\n");
                
                dout.flush();
                fis.close();
                dataIn.close();
            }
            din.close();
            dout.close();
            s.close();

            state = "rest";
        }
        catch(Exception exc) {
            exc.printStackTrace();
        }        
    }
client:
程序代码:
    public void receiveFile() {
        state="receive";
        
        try {
            dout.writeUTF("{ReceiveFiles}");

            // receive each file through one new socket
            for(int i=0; i<list.length; i++) {
                // read file name
                String str = din.readUTF();
                int j=str.lastIndexOf("\\");
                
                // create file output
                File f = new File(path.getPath() + "\\" + str.substring(j+1));
                if(!f.exists())
                    f.createNewFile();
                FileOutputStream fos = new FileOutputStream(f);
                int length=0;
                byte[] buffer = new byte[1024];
                
                // read file buffer and write it into file f
                ta.append("File:  " + f + " receive begin!\n");
                while ((length = din.read(buffer)) != -1) {
                    fos.write(buffer, 0, length);
                }
                
                fos.close();
                ta.append("File:  " + f + " receive end!\n");
            }
            din.close();
            socket.close();
        }
        catch(Exception e) {
            e.printStackTrace();
        }
        
        state="rest";
    }
搜索更多相关主题的帖子: Socket 文件 quot din get 
2008-01-10 09:26
千里冰封
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:灌水之王
等 级:版主
威 望:155
帖 子:28477
专家分:59
注 册:2006-2-26
得分:0 
自己定一个协议,以发送之前告诉文件名,以及文件的长度
等读完那些长度的字节以后,再读新的文件名,以及新的文件长度就可以了

可惜不是你,陪我到最后
2008-01-10 13:43
longrm
Rank: 1
等 级:新手上路
帖 子:129
专家分:0
注 册:2007-6-18
得分:0 
原帖由 [bold][underline]千里冰封[/underline][/bold] 于 2008-1-10 13:43 发表 [url=http://bbs.][/url]
自己定一个协议,以发送之前告诉文件名,以及文件的长度
等读完那些长度的字节以后,再读新的文件名,以及新的文件长度就可以了

哦,那这协议自己定,,,额,,,试试 哈

java群: 55919698

My blog: http://hi.baidu.com/longrm
2008-01-10 14:28
longrm
Rank: 1
等 级:新手上路
帖 子:129
专家分:0
注 册:2007-6-18
得分:0 
可以了,呵呵

java群: 55919698

My blog: http://hi.baidu.com/longrm
2008-01-11 09:30
nicholas6lee
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2012-3-14
得分:0 
楼主,怎么做的啊,能不能说一下?
2012-04-28 20:05



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-196796-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.223973 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved