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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 满兴旺 中级黑马   /  2014-4-24 23:08  /  1193 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 满兴旺 于 2014-4-24 23:10 编辑

/*
需求:上传图片。
*/
import java.io.*;
import java.net.*;

/*
客户端:
1,服务端点
2,读取一个文件
3,通过socket输出流将数据发给服务端
4,读取服务端反馈信息。
5,关闭
*/
class  PicClient
{
        public static void main(String[] args) throws Exception
        {
                //①
                Socket s=new Socket("127.0.0.1",10007);
                //②源:硬盘上的文件
                FileInputStream fis=new FileInputStream("1.jpg");
               
                //③目的:socket输出流
               
                OutputStream out=s.getOutputStream();
               
                byte[] buf=new byte[1024];
                int len=0;
                while((len=fis.read(buf))!=-1)
                {
                        out.write(buf,0,len);
                }

                s.shutdownOutput();//------------------------------------------告诉服务端结束

                InputStream in=s.getInputStream();
                byte[] bufIn=new byte[1024];

                int num=in.read(bufIn);
                System.out.println(new String(buf,0,num));//读取一行

                fis.close();
                s.close();        
        }
}

class PicServer
{
        public static void main(String[] args) throws Exception
        {
                ServerSocket ss=new ServerSocket(10007);
                Socket s=ss.accept();

                String ip=s.getInetAddress().getHostAddress();
                System.out.println(ip+"连入成功");

                //源:socket输入流
                InputStream fis=s.getInputStream();
                //目的:硬盘上的文件
                FileOutputStream fos=new FileOutputStream("2.jpg");

                byte[] bufIn=new byte[1024];
                int len=0;
                while((len=fis.read(bufIn))!=-1)
                {
                        fos.write(bufIn,0,len);
                }

                //输出反馈
                OutputStream out=s.getOutputStream();
                out.write("上传成功".getBytes());

                fos.close();
                s.close();
                ss.close();

        }
}
在我这客户端显示是:
能帮我调一下吗???


2 个回复

倒序浏览
你的代码中client端最后
InputStream in=s.getInputStream();
byte[] bufIn=new byte[1024];
int num=in.read(bufIn); --> 这行返回值是-1
System.out.println(new String(buf,0,num)); -->num=-1,这里出错了
这几行代码完全没用,而且会导致出错。

下面是把你的代码改了一下
Server端:
  1. package test;

  2. /*
  3. 需求:上传图片。
  4. */
  5. import java.io.*;
  6. import java.net.*;

  7. public class SocketServerTest {
  8.        
  9.         public static void main(String[] args) throws Exception {
  10.                 ServerSocket ss = new ServerSocket(10007);
  11.                
  12.                 System.out.println("打开监听");
  13.                 Socket s = ss.accept();

  14.                 String ip = s.getInetAddress().getHostAddress();
  15.                 System.out.println(ip + "连入成功");

  16.                 // 源:socket输入流
  17.                 InputStream is = s.getInputStream();
  18.                 // 目的:硬盘上的文件
  19.                 FileOutputStream fos = new FileOutputStream("F:/zzd2.jpg");

  20.                 try{
  21.                        
  22.                         byte[] buf = new byte[1024];
  23.                         int len = 0;
  24.                         while ((len = is.read(buf)) != -1) {
  25.                                 fos.write(buf, 0, len);
  26.                         }
  27.                         System.out.println("上传成功");
  28.                 }catch(Exception e){
  29.                         System.out.println("上传失败");
  30.                 }finally{
  31.                         if(is!=null){
  32.                                 is.close();
  33.                         }
  34.                         if(fos!=null){
  35.                                 fos.close();
  36.                         }
  37.                         if(s!=null){
  38.                                
  39.                                 s.close();
  40.                         }
  41.                         if(ss!=null){
  42.                                
  43.                                 ss.close();
  44.                         }
  45.                 }

  46.                 // 输出反馈
  47. //                OutputStream out = s.getOutputStream();
  48. //                out.write("上传成功".getBytes());
  49.         }
  50. }
复制代码

Client端:那部分错误的代码被我注释掉了
  1. package test;

  2. import java.io.FileInputStream;
  3. import java.io.InputStream;
  4. import java.io.OutputStream;
  5. import java.net.Socket;

  6. public class SocketClientTest {

  7.         /*
  8.          * 客户端: 1,服务端点 2,读取一个文件 3,通过socket输出流将数据发给服务端 4,读取服务端反馈信息。 5,关闭
  9.          */
  10.         // class PicClient
  11.         // {
  12.         public static void main(String[] args) throws Exception {
  13.                 // ①
  14.                 Socket s = new Socket("127.0.0.1", 10007);
  15.                 System.out.println("连入成功");
  16.                 // ②源:硬盘上的文件
  17.                
  18.                 FileInputStream fis = new FileInputStream("F:/2014.jpg");

  19.                 // ③目的:socket输出流

  20.                 OutputStream out = s.getOutputStream();
  21.                 byte[] buf = new byte[1024];
  22.                 int len = 0;
  23.                 try{
  24.                        
  25.                         while ((len = fis.read(buf)) != -1) {
  26.                                 out.write(buf, 0, len);
  27.                         }
  28.                         s.shutdownOutput();// ------------------------------------------告诉服务端结束
  29.                        
  30. //                        byte[] bufin = new byte[1024];
  31. //                        int num = 0;
  32. //                        InputStream in = s.getInputStream();
  33. //                        num = in.read(bufin);
  34. //                        System.out.println(num);

  35.                        
  36.                 }catch(Exception e){
  37.                        
  38.                 }finally{
  39.                         if(fis!=null){
  40.                                
  41.                                 fis.close();
  42.                         }
  43.                         if(out!=null){
  44.                                 out.close();
  45.                         }
  46.                         if(s!=null){
  47.                                
  48.                                 s.close();
  49.                         }
  50.                 }
  51.         }
  52. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
SyouRai_Tsk + 1

查看全部评分

回复 使用道具 举报
客户端 的s.shutdownOutput();// ------------------------------------------告诉服务端结束
应该放到 try语句块的最后一句 你试试
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马