网络传输文件的问题,很急,大侠帮帮忙! FileOutputStream foutReceive = new FileOutputStream(pFileName); foutReceive.write(buf);>> foutReceive.flush(); 这句加了吗?? foutReceive.close(); 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 >> foutReceive.flush(); 这句加了吗??已经flush了 >> finUpload.read(buf) read(byte[]) 不一定会把所有的byte都读进来,改用while而且,返回-1不是失败,是读完了,抛异常才是失败。int count =0 ;while(count < buf.length ) { try{ int len = finUpload.read(buf, count, buf.length - count); if( len < 0) break; }catch(IOException e ){ System.err.println("读取文件错误!"); return false; } count += len;}.....write(byte[]) 可能同样需要改while; 试试我的,下载50M文件没有问题:(下载潜在服务器端压缩,到达客户端解压)import java.io.*;import java.net.*;import java.util.zip.*;class FileSocketServ{ public void start() throws IOException{ int ret=0; byte[] tmpdata=new byte[4096]; byte[] data; ServerSocket s=new ServerSocket(5918); while(true){ FileInputStream in=new FileInputStream("test.exe"); Socket client=s.accept(); GZIPOutputStream out=new GZIPOutputStream(new BufferedOutputStream(client.getOutputStream())); do{ ret=in.read(tmpdata); System.out.println(ret); if(ret==-1) break; data=new byte[ret]; System.arraycopy(tmpdata, 0, data, 0, ret); out.write(data); out.flush(); }while(true); in.close(); out.close(); } }}client===import java.io.*;import java.net.*;import java.util.zip.*;class FileSocketClnt{ public static void main(String[] args) throws IOException{ int ret; byte[] tmpdata=new byte[4096]; byte[] data; Socket c=new Socket("zxf", 5918); GZIPInputStream in=new GZIPInputStream(c.getInputStream()); FileOutputStream f=new FileOutputStream("Test2.exe"); do{ ret=in.read(tmpdata); if(ret==-1)break; data=new byte[ret]; System.arraycopy(tmpdata, 0, data, 0, ret); f.write(data); f.flush(); }while(true); f.close(); in.close(); c.close(); }} TO:farawayzheng_necas(遥远) if (finUpload.read(buf) <= 0) { System.err.println("读取文件错误!"); return false; }这种方法是从21天学通JAVA 2里面看到的,我和他的代码完全相同。是不是这种方法不对呢? 当然不对了,尽信书不如无书 :)看一看jdk api doc 就全明白了。 Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); 有一个可以直接NEW 来代替他的方法是什么??? 分数有什么用,怎么查看自己有多少分? OO到底是什么 求一正则表达式,清高手解答立即散分 IO问题 Socket Connection Timed Out 的问题 关于一个接口的问题 有关于GridBagLayout的布局问题,为什么设置gridx,gridy没有效果? 怎样知道当前的网络状况? 高分求教:关于日期的问题! 送100分求救,JBuilder6.0环境设置问题 swing中一个组件的大小和它上面的字体的大小的关系是什么?
而且,返回-1不是失败,是读完了,抛异常才是失败。int count =0 ;
while(count < buf.length ) {
try{
int len = finUpload.read(buf, count, buf.length - count);
if( len < 0)
break;
}catch(IOException e ){
System.err.println("读取文件错误!");
return false;
}
count += len;
}
.....
write(byte[]) 可能同样需要改while;
import java.io.*;
import java.net.*;
import java.util.zip.*;class FileSocketServ{
public void start()
throws IOException{
int ret=0;
byte[] tmpdata=new byte[4096];
byte[] data;
ServerSocket s=new ServerSocket(5918);
while(true){
FileInputStream in=new FileInputStream("test.exe");
Socket client=s.accept();
GZIPOutputStream out=new GZIPOutputStream(new BufferedOutputStream(client.getOutputStream()));
do{
ret=in.read(tmpdata);
System.out.println(ret);
if(ret==-1) break;
data=new byte[ret];
System.arraycopy(tmpdata, 0, data, 0, ret);
out.write(data);
out.flush();
}while(true);
in.close();
out.close();
}
}
}
client===
import java.io.*;
import java.net.*;
import java.util.zip.*;class FileSocketClnt{
public static void main(String[] args)
throws IOException{
int ret;
byte[] tmpdata=new byte[4096];
byte[] data;
Socket c=new Socket("zxf", 5918);
GZIPInputStream in=new GZIPInputStream(c.getInputStream());
FileOutputStream f=new FileOutputStream("Test2.exe");
do{
ret=in.read(tmpdata);
if(ret==-1)break;
data=new byte[ret];
System.arraycopy(tmpdata, 0, data, 0, ret);
f.write(data);
f.flush();
}while(true);
f.close();
in.close();
c.close();
}
}
if (finUpload.read(buf) <= 0)
{
System.err.println("读取文件错误!");
return false;
}
这种方法是从21天学通JAVA 2里面看到的,我和他的代码完全相同。是不是这种方法不对呢?
看一看jdk api doc 就全明白了。