黑马程序员技术交流社区

标题: 网络编程 [打印本页]

作者: Lu.    时间: 2019-10-10 23:04
标题: 网络编程
需求说明:我们来做一个“文件上传案例”,有以下要求:
将项目中的一个图片,通过客户端上传至服务器

答案
操作步骤:
1,创建服务器,等待客户端连接
2,创建客户端Socket,连接服务器
3,获取Socket流中的输出流,功能:用来把数据写到服务器
4,创建字节输入流,功能:用来读取数据源(图片)的字节
5,把图片数据写到Socket的输出流中(把数据传给服务器)
6,客户端发送数据完毕,结束Socket输出流的写入操作,告知服务器端
7,获取Socket的输入流
8,创建目的地的字节输出流
9,把Socket输入流中的数据,写入目的地的字节输出流中
10,获取Socket的输出流, 作用:写反馈信息给客户端
11,写反馈信息给客户端
12,获取Socket的输入流  作用: 读反馈信息
13,读反馈信息
代码:
public class TCPServer {
        public static void main(String[] args)throws IOException {
                //1创建服务器对象 
                ServerSocket server = new ServerSocket(9898);
                //2等待客户端连接   如果有客户端连接  获取到客户端对象 
                Socket s = server.accept();
                //3当前在服务器中  读取数据
                InputStream in = s.getInputStream();
                //4当前在服务器中  将数据写到流中
                FileOutputStream fos = new FileOutputStream("/Users/apple/Documents/复制品.JPG");
                byte[] bytes = new byte[1024];
                int len = 0 ;
                while((len = in.read(bytes))!=-1){
                        fos.write(bytes, 0, len);
                }
                //5写完数据提示上传成功
                s.getOutputStream().write("上传成功".getBytes());
                //6释放资源
                fos.close();
                s.close();
                server.close();
        }
}

public class TCPCleint {
        public static void main(String[] args)throws IOException {
                //1创建服务器对象 
                Socket s = new Socket("127.0.0.1", 9898);
                //2指定路径
                FileInputStream fis = new FileInputStream("/Users/apple/Desktop/1.JPG");
                //3读取服务器数据
                OutputStream out = s.getOutputStream();
                byte[] bytes = new byte[1024];
                int len = 0;
                while((len = fis.read(bytes))!=-1) {
                        out.write(bytes,0,len);
                }
                //4告知书写完毕
                s.shutdownOutput();
                //5书写到服务器
                InputStream in = s.getInputStream();
                len = in.read(bytes);
                System.out.println("服务器:"+new String(bytes,0,len));
                //6释放资源
                fis.close();
                s.close();
        }
}




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2