java socket通信服务端接收的文件为什么比客户端发出的大?-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文

java socket通信服务端接收的文件为什么比客户端发出的大?

2016-05-27 14:09:15 2104 1

服务端:

public class Server2User extends Thread{
private Socket socket;
private InputStream is;
private BufferedInputStream bis;
private FileOutputStream fos;
private File file;
private byte name[] = new byte[1024];
private byte transport[] = new byte[1024];
private File path;
public Server2User(Socket socket)
{
    this.socket= socket;
}

public void run()
{
    try {
        is = socket.getInputStream();
        bis= new BufferedInputStream(is);
        bis.read(name);
        String filename = new String(name);
        filename = filename.trim();
        System.out.println("得到文件名"+filename);

         path = this.createFile(filename);
         System.out.println(path.getName());
        int length;
        fos = new FileOutputStream(path);
        int i = 0;
        while((length=bis.read(transport))!=-1)
        {
                this.write2file(transport);
                i++;
        }
        this.close();

    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

}


private void write2file(byte[] transport)
{
    try {
         fos.write(transport);
    } catch (FileNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}


private File createFile(String filename)
{

    try {
        file = new File("f:/test/"+filename);
        file.createNewFile();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    return file;

}
private void close()
{

        try {
            if(is!=null)
                is.close();

            if(bis!=null)
                bis.close();
            if(fos!=null)
                fos.close();
            if(is!=null)
                is.close();
            if(socket!=null)
                socket.close();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

}
}

客户端:

public class ClientSocket_upload {
private Socket socket;
private OutputStream os;
private BufferedOutputStream bos;
private String path;
private FileInputStream fis;
private File file;
public ClientSocket_upload(String path)
{
this.path = path;
}
public void uploadfile(){
try {
//1.创建客户端Socket,指定服务器地址和端口
socket= new Socket("10.104.77.108", 1080);
//2.获取输出流,向服务器端发送信息
os = socket.getOutputStream();//字节输出流
bos = new BufferedOutputStream(os);
file = new File(path);
fis= new FileInputStream(file);
String name = file.getName();
byte[] temp = name.getBytes(); 
byte[] bname = new byte[1024];
byte[] by = new byte[1024];
for(int i = 0 ;i<=bname.length-1;i++)
{
if(i<=temp.length-1)
{
bname[i] = temp[i];
}
else
{
bname[i]=0;
}
}
bos.write(bname);
        while((fis.read(by))!=-1)
        {
            bos.write(by);
        }

        fis.close();
        bos.close();
        os.close();
        socket.close();
    } catch (UnknownHostException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }

}
}
取消 提交回答
全部回答(1)
  • 蛮大人123
    2019-07-17 19:17:45

    你的代码没有问题,我测试了你的代码,传输的文件是几k的小文件没有问题,又传输一个300MB的大文件时也没有问题。
    我的测试代码是:自定义一个Server类.

    import java.io.IOException;
    import java.net.ServerSocket;
    import java.net.Socket;
    public class Server {
    public static void main(String[] args) {
    try {
    ServerSocket server = new ServerSocket(1080);
    while(true){
    Socket socket = server.accept();
    new Server2User(socket).start();
    }
    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    }
    }

    客户端的main方法是:

        public static void main(String[] args) {
            ClientSocket_upload u = new ClientSocket_upload("D:/WoodWang/JavaSoft/eclipse-jee-mars-R-win32-x86_64.zip");
            u.uploadfile();
        }
    0 0
相关问答

41

回答

[@徐雷frank][¥20]什么是JAVA的平台无关性

大河人家 2018-10-29 23:55:20 146561浏览量 回答数 41

170

回答

惊喜翻倍:免费ECS+免费环境配置~!(ECS免费体验6个月活动3月31日结束)

豆妹 2014-10-29 17:52:21 231832浏览量 回答数 170

8

回答

OceanBase 使用动画(持续更新)

mq4096 2019-02-20 17:16:36 340290浏览量 回答数 8

13

回答

[@饭娱咖啡][¥20]我想知道 Java 关于引用那一块的知识

心意乱 2018-10-31 18:44:12 143246浏览量 回答数 13

118

回答

OSS存储服务-客户端工具

newegg11 2012-05-17 15:37:18 300629浏览量 回答数 118

22

回答

爬虫数据管理【问答合集】

我是管理员 2018-08-10 16:37:41 148466浏览量 回答数 22

23

回答

阿里云开放端口权限

xcxx 2016-07-20 15:03:33 657180浏览量 回答数 23

31

回答

[@倚贤][¥20]刚学完html/css/js的新手学习servlet、jsp需要注意哪些问题?

弗洛伊德6 2018-10-27 21:52:43 147429浏览量 回答数 31

43

回答

【精品问答集锦】Python热门问题

小六码奴 2019-05-30 15:27:34 142466浏览量 回答数 43

10

回答

[@墨玖tao][¥20]为什么流式处理框架都是 java 写成的,JVM 是不是在流和批存在着特殊优势。还有分布式资源调度,感觉Mesos 的成长速度跟不上 Yarn。这是为什么?

管理贝贝 2018-10-23 13:18:03 137352浏览量 回答数 10
+关注
蛮大人123
我说我不帅他们就打我,还说我虚伪
0
文章
7733
问答
问答排行榜
最热
最新
相关电子书
更多
OceanBase 入门到实战教程
立即下载
阿里云图数据库GDB,加速开启“图智”未来.ppt
立即下载
实时数仓Hologres技术实战一本通2.0版(下)
立即下载