A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© lzw123451 中级黑马   /  2013-2-24 14:28  /  3536 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 李志卫 于 2013-2-24 21:39 编辑

以下例子要求上传图片
但我写的例子图片上传后有所损坏,为什么呢?


import java.net.*;
import java.io.*;

class TcpClient
{
public static void main(String[] args) throws Exception
{
Socket s = new Socket("192.168.1.2",10005);
File file = new File("C:\\星空.jpg");
BufferedInputStream bfi = new BufferedInputStream(new FileInputStream(file));
BufferedOutputStream bfo = new BufferedOutputStream (s.getOutputStream());
BufferedReader bfr = new BufferedReader(new InputStreamReader(s.getInputStream()));

int by = 0;
while((by=bfi.read())!=-1)
{
   bfo.write(by);
}
   s.shutdownOutput();
                String line = null;
while((line=bfr.readLine())!=null)
System.out.println(line);
                s.close();
bfi.close();
bfo.close();
bfr.close();


}
}



class  TcpServer
{
public static void main(String[] args) throws Exception
{

ServerSocket ss = new ServerSocket(10005);
Socket s = ss.accept();
                File file = new File("F:\\星空.jpg");
String ip = s.getInetAddress().getHostAddress();
                BufferedInputStream bfi = new BufferedInputStream(s.getInputStream());
BufferedOutputStream bfo = new BufferedOutputStream (new FileOutputStream(file));
PrintWriter pw = new PrintWriter(s.getOutputStream(),true);
System.out.println(ip+"...正在上传。");

int by = 0;
while((by=bfi.read())!=-1)
{
   bfo.write(by);
}
pw.println("文件上传成功");

s.shutdownOutput();


s.close();
ss.close();
bfi.close();
bfo.close();
pw.close();

}
}


评分

参与人数 1技术分 +1 收起 理由
李培根 + 1 赞一个!

查看全部评分

4 个回复

倒序浏览
本帖最后由 李光耀 于 2013-2-24 15:59 编辑

while((by=bfi.read())!=-1)
{
   bfo.write(by);
  bfo.flush();
客户端这块要刷新一下!!因为你只写到了BufferedOutputStream中 并没有写出去。
因为缓冲区8KB大小,写满就自动刷出去。 最后剩下一点不够8KB,所以没有刷出去,导致图片损坏。

毕老师 TCP协议 练习  常见问题  中有讲

回复 使用道具 举报
李光耀 发表于 2013-2-24 15:57
while((by=bfi.read())!=-1)
{
   bfo.write(by);

不错,答案正确,谢谢。
回复 使用道具 举报
李志卫 发表于 2013-2-24 21:03
不错,答案正确,谢谢。

你也觉得我回答的很好是不是,,,可为啥没斑竹出来给个技术分~~~
回复 使用道具 举报
李光耀 发表于 2013-2-24 21:15
你也觉得我回答的很好是不是,,,可为啥没斑竹出来给个技术分~~~

因为 他不在电脑旁..............吧。 年轻人,别急躁。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马