黑马程序员技术交流社区
标题:
Socket复制文件问题
[打印本页]
作者:
The_king丶
时间:
2014-12-24 17:58
标题:
Socket复制文件问题
package 课堂;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;
/*
* 模拟文件上传:客户端读取某个非文本文件,发送到服务器端,接收
* 要求,先发送文件大小到服务器端,根据文件大小判断读写结束
* 计算用时
*/
public class Server_Server03 {
public static void main(String[] args) throws IOException {
ServerSocket ss = new ServerSocket(8888);
Socket s = ss.accept();
BufferedInputStream bis = new BufferedInputStream(s.getInputStream());
BufferedOutputStream bos = new BufferedOutputStream(
new FileOutputStream("C:/Users/yy/Desktop/aa.jpg"));
BufferedReader br = new BufferedReader(new InputStreamReader(
s.getInputStream()));
// 长度
String slength = br.readLine();
System.out.println(slength);
int length = Integer.parseInt(slength);
System.out.println("长度为:" + length);
byte[] b = new byte[length];
bis.read(b);
bos.write(b);
bos.close();
bis.close();
System.out.println("复制成功");
s.close();
}
}
复制代码
package 课堂;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.net.Socket;
/*
* 模拟文件上传:客户端读取某个非文本文件,发送到服务器端,接收
* 要求,先发送文件大小到服务器端,根据文件大小判断读写结束
* 计算用时
*/
public class Server_Socket03 {
public static void main(String[] args) throws IOException {
Socket s = new Socket("localhost", 8888);
File file = new File("C:/Users/yy/Desktop/bb.jpg");
FileInputStream fis = new FileInputStream(file);
BufferedInputStream bis = new BufferedInputStream(fis);
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(
s.getOutputStream()));
BufferedOutputStream bos = new BufferedOutputStream(s.getOutputStream());
long length = file.length();
bw.write("" + length);
bw.newLine();
bw.flush();
System.out.println(length);
byte[] b = new byte[(int) length];
bis.read(b);
bos.write(b);
bos.flush();
bis.close();
bw.close();
bos.close();
s.close();
fis.close();
}
}
复制代码
复制到最后会有错误,这是个什么情况?求详细解析。
作者:
Mr.Ni
时间:
2014-12-25 12:25
bos.write(b);看了一下,写出的时候怎么还写到数组里面,要写到输出流里面,你不是定义了输出流么,都没有用上。服务端也是,也要写到输出流里面。
还有这样写文件的大小不能超过2G,int的最大值是2147483647 字节,也就1.9999999G
作者:
The_king丶
时间:
2014-12-25 13:45
Mr.Ni 发表于 2014-12-25 12:25
bos.write(b);看了一下,写出的时候怎么还写到数组里面,要写到输出流里面,你不是定义了输出流么,都没有 ...
将 b.length 个字节从指定的 byte 数组写入此输出流。我那句是那个意思。
作者:
Mr.Ni
时间:
2014-12-25 17:31
{:2_41:}我刚才搞错了。。。
你这里在服务端用了两个读取流操作同一个s.getInputStream()
我试了一下,从客户端写两行话,在服务端用一个读取流依次读取两句话,正常显示
用两个不同的流操作s.getInputStream(),第一个读到第一行,第二个读到是乱码。
可能你的问题跟这个有关。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2