黑马程序员技术交流社区

标题: 求解答 [打印本页]

作者: longyun    时间: 2016-6-3 22:30
标题: 求解答
使用socket编写一个Java程序,要求:客户端上传图片到服务端,服务端接收完毕后存放到本地,并发送“接收完毕”的信息到客户端,客户端在控制台显示接收的情况?
作者: 18611643318    时间: 2016-6-3 22:58
  1. package com.itheima;

  2. import java.io.BufferedReader;
  3. import java.io.BufferedWriter;
  4. import java.io.FileInputStream;
  5. import java.io.FileOutputStream;
  6. import java.io.InputStream;
  7. import java.io.InputStreamReader;
  8. import java.io.OutputStream;
  9. import java.io.OutputStreamWriter;
  10. import java.net.ServerSocket;
  11. import java.net.Socket;

  12. /**
  13. * 8、使用TCP协议写一个可以上传文件的服务器和客户端。
  14. * @author Venus
  15. *
  16. */
  17. public class Test8 {
  18.         public static void main(String[] args) {
  19.                 //启动一个新的线程,调用服务器的服务
  20.                 new Thread() {
  21.                         public void run() {
  22.                                 try {
  23.                                         Server.server();
  24.                                 } catch (Exception e) {
  25.                                         // TODO Auto-generated catch block
  26.                                         e.printStackTrace();
  27.                                 }
  28.                         }
  29.                 }.start();
  30.                 //当前线程,调用客户端的上传方法
  31.                 try {
  32.                         new Client().upload();
  33.                 } catch (Exception e) {
  34.                         // TODO Auto-generated catch block
  35.                         e.printStackTrace();
  36.                 }
  37.                
  38. }
  39. }
  40. //客户端  
  41. class Client        {
  42.   
  43.     public static void upload() throws Exception {  
  44.     //建立Socket服务  ,传入参数服务器的ip和端口号
  45.     Socket Socket = new Socket("127.0.0.1", 9527);  
  46.     //从客户端本地读取文件,并写入socket的输出流中  
  47.     OutputStream out = Socket.getOutputStream();  
  48.     //实例化对象fileReader
  49.     InputStream fileRead = new FileInputStream("D:\\1.txt");  
  50.     //建立数组
  51.     byte[] buf = new byte[1024];  
  52.     int len = 0;
  53.     //判断是否读到文件末尾
  54.     while((len=fileRead.read(buf)) != -1)
  55.         {  
  56.          out.write(buf, 0, len);  
  57.         }  
  58.     //断开socket  
  59.     Socket.shutdownOutput();  
  60.     //获取从服务端反馈的信息  
  61.     BufferedReader in = new BufferedReader(new InputStreamReader(Socket.getInputStream()));  
  62.     String serverBack = in.readLine();  
  63.     System.out.println(serverBack);   
  64.     //资源关闭  
  65.     Socket.close();  
  66.     fileRead.close();  
  67.   }  
  68. }  

  69. //服务端  
  70. class Server {  
  71.    public static void server() throws Exception {  
  72.     //建立服务端Socket  
  73.     ServerSocket ss = new ServerSocket(9527);  
  74.     //接收客户端Socket  
  75.     Socket fileLoaderSocket = ss.accept();  
  76.       
  77.     //打印连接信息  
  78.     String ip = fileLoaderSocket.getInetAddress().getHostAddress();  
  79.     System.out.println(ip + "...conncected");  
  80.       
  81.     //接收文件,并保存  
  82.     InputStream in = fileLoaderSocket.getInputStream();  
  83.     //实例化对象fileSave
  84.     OutputStream fileSave = new FileOutputStream("D:\\2.txt");  
  85.     //建立数组buf
  86.     byte[] buf = new byte[1024];  
  87.     int len = 0;  
  88.     //判断是否读到文件末尾
  89.      while((len=in.read(buf)) != -1)
  90.        {  
  91.         fileSave.write(buf, 0, len);  
  92.         //刷新
  93.         fileSave.flush();  
  94.        }  
  95.     //返回文件复制情况信息  
  96.     BufferedWriter out = new BufferedWriter(new OutputStreamWriter(fileLoaderSocket.getOutputStream()));  
  97.     out.write("文件上传成功");  
  98.     //刷新
  99.     out.flush();  
  100.     //资源关闭  
  101.     ss.close();  
  102.     fileLoaderSocket.close();  
  103.     fileSave.close();  
  104.   }  
  105. }
复制代码





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