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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 莫道荣 中级黑马   /  2013-3-24 17:19  /  1827 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 莫道荣 于 2013-3-24 18:52 编辑
  1. import java.io.*;
  2. import java.net.*;
  3. class UploadPicDemo
  4. {
  5.         public static void main(String[] args) throws Exception
  6.         {
  7.                 Socket s=new Socket("127.0.0.1",10001);//创建客户端通信套接字,端口号为10001
  8.                 File f=new File("D:\\Documents\\Pictures\\me.jpg");//把客户端选择的文件封装成file对象
  9.                 //判断客户选择的文件是否合法
  10.                 if (!f.exists()&&!f.isFile())
  11.                 {
  12.                         System.out.println("选择的文件不存在或不是文件,请重新选择");
  13.                         return;
  14.                 }
  15.                 if (f.length()>1024*1024*2)
  16.                 {
  17.                         System.out.println("选择的文件太大");
  18.                         return;
  19.                 }
  20.                 FileInputStream in=new FileInputStream(f);//创建文件流
  21.                 OutputStream out=s.getOutputStream(); //获取套接字输出流
  22.                
  23.                 byte [] buf=new byte[1024*1024*2];
  24.                 int len=0;
  25.                 while ((len=in.read(buf))!=-1)
  26.                 {
  27.                         System.out.println(new Integer(len).toString());//获取文件的实际长度
  28.                         out.write(buf,0,len);//向服务端输出数据
  29.                 }
  30.                 s.shutdownInput() ;//告诉服务端文件已经到了结尾
  31.                 byte [] buff=new byte[1024];
  32.                 InputStream br=s.getInputStream();
  33.                 int num=br.read(buff);//获取服务端返回的信息
  34.                 System.out.println(new String(buff,0,num));
  35.                 in.close();
  36.                 s.close();
  37.         }
  38. }
复制代码
客户端代码,读取本地的一张图片发送给服务端
  1. import java.io.*;
  2. import java.net.*;
  3. class UploadPicServerDemo
  4. {
  5.         public static void main(String[] args) throws Exception
  6.         {
  7.                 ServerSocket ss=new ServerSocket(10001);//创建服务端通信套接字,侦听10001端口号

  8.                         Socket s=ss.accept();//接收客户端套接字
  9.                         System.out.println(s.getInetAddress().getHostName());
  10.                         byte [] buf=new byte[1024*1024*2];//定义缓冲区
  11.                         InputStream in=s.getInputStream();//获取客户端套接字输入流
  12.                         FileOutputStream out =new FileOutputStream("server.jpg");
  13.                         int len;
  14.                         while ((len=in.read(buf))!=-1)//把客户端传过来的数据存到缓冲区里
  15.                         {
  16.                                 out.write(buf,0,len);//写出
  17.                         }
  18.                         System.out.println(new Integer(len).toString());
  19.                         OutputStream bw=s.getOutputStream();
  20.                         bw.write("上传成功".getBytes());
  21.                         out.close();
  22.                         s.close();
  23.                         
  24.                 }
  25.         
  26. }
复制代码
运行之后报了个图1的错,但是服务端的文件却创建了,大小和客户端上传的一样大,但是打开还原补了

未命名1.jpg (32.1 KB, 下载次数: 7)

图1

图1

未命名2.jpg (18.84 KB, 下载次数: 8)

原图

原图

未命名3.jpg (21.45 KB, 下载次数: 6)

服务端写出图片

服务端写出图片

评分

参与人数 1技术分 +1 收起 理由
贾文泽 + 1

查看全部评分

2 个回复

倒序浏览
import java.io.*;
import java.net.*;
class UploadPicServerDemo
{
        public static void main(String[] args) throws Exception
        {
                ServerSocket ss=new ServerSocket(10001);//创建服务端通信套接字,侦听10001端口号

                        Socket s=ss.accept();//接收客户端套接字
                        System.out.println(s.getInetAddress().getHostName());
                        byte [] buf=new byte[1024*1024*2];//定义缓冲区
                        InputStream in=s.getInputStream();//获取客户端套接字输入流
                        FileOutputStream out =new FileOutputStream("server.jpg");
                        int len;
                        while ((len=in.read(buf))!=-1)//把客户端传过来的数据存到缓冲区里
                        {
                                out.write(buf,0,len);//写出
                        }
                        System.out.println(new Integer(len).toString());   //这句代码貌似有问题~~~可以考虑去掉
                        OutputStream bw=s.getOutputStream();
                        bw.write("上传成功".getBytes());
                        out.close();
                        s.close();
                        
                }
        
}

评分

参与人数 1技术分 +1 收起 理由
贾文泽 + 1

查看全部评分

回复 使用道具 举报
       s.shutdownIntput() ;//告诉服务端文件已经到了结尾 这里写错了,应该是s.shutdownOutput() ;

31.                byte [] buff=new byte[1024];

32.                InputStream br=s.getInputStream();

33.                int num=br.read(buff);//获取服务端返回的信息

34.                System.out.println(new String(buff,0,num));

35.                in.close();

36.                s.close();

评分

参与人数 1技术分 +1 收起 理由
贾文泽 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马