zoukankan      html  css  js  c++  java
  • JAVA实现C/S结构小程序

    程序功能:

    客户端向服务器发送一个本地磁盘中的文件, 服务器程序接受后保存在其他位置.

    客户端实现步骤:

    1. 创建一个客户端对象Socket,构造方法中绑定服务器的IP地址 和 端口号
    2. 使用Socket对象中的方法 getOutputSteam()获取网络字节输出流OutputStream对象
    3. 使用字节输出流OutputStream对象中的write()方法,给服务器发送数据
    4. 使用Socket对象中的getInputStream()获取网络字节输入流InputStream()对象  
    5. 使用网络字节输入流InputStream对象中的read()方法,读取服务器回写的数据.
    6. 释放Socket资源.
     1 import java.io.*;
     2 import java.net.Socket;
     3 
     4 public class TCPClient {
     5     public static void main(String[] args) throws IOException {
     6             //1.创建一个客户端对线Socket,构造方法中绑定服务器的IP地址和端口号
     7              Socket socket = new Socket("127.0.0.1",8888);
     8            // Socket socket = new Socket("192.168.15.132",8888);
     9             //2.使用Socket对象中的方法getOutputStream(0获取网络字节输出流OutputSteam对象
    10             //这个流是个网络流,指向了服务器
    11             OutputStream os = socket.getOutputStream();
    12             File f = new  File("E:\图片\桌面图片\宋民国\222.jpg");
    13             FileInputStream fis = new FileInputStream(f);
    14             byte[] bs = new byte[1024];
    15             int len;
    16             while((len=fis.read(bs))!=-1)
    17             {
    18                 //3.使用字节输出流OutputSteam对象中的方法write,给服务器发送数据
    19                 os.write(bs,0,len);
    20             }
    21             //告诉服务器关闭输出
    22             socket.shutdownOutput();
    23             fis.close();
    24 
    25            //4.使用Socket对象中的方法getInputSteam()获取网络字节输入流InputSteam()对象
    26             InputStream is = socket.getInputStream();
    27             //5.使用网络字节输入流InputSteam对象中的方法read,读取服务器回写的数据
    28             byte[] list = new byte[1024];
    29             int len1 = is.read(list);
    30             String str1 = new String(list,0,len1);
    31             //6.释放资源(Socket)
    32             System.out.println(str1);
    33             socket.close();//只用关socket就行了
    34 
    35 
    36     }
    37 }

    服务器端实现步骤:

    1. 创建一个服务器对ServerSocket对象和指定的端口号一致.
    2. 使用ServerSocket对象中的accept方法,获取请求的客户端对象Socket
    3. 使用Socket对象中的getInputSream()方法
    4. 使用网络字节输入流InputStream对象中的read()方法
    5. 使用Socket对象中的getoutputStream()方法
    6. 使用网络字节输出流OutputSteam对象中的write()方法
    7. 释放资源.
      1 import java.io.*;
      2 import java.net.ServerSocket;
      3 import java.net.Socket;
      4 import java.util.Random;
      5 
      6 public class TCPServer {
      7     public static void main(String[] args) throws IOException {
      8 
      9         //method01();
     10         method02();
     11 
     12     }
     13     public static void method02() throws IOException{
     14        //  1.创建一个服务器对ServerSocket对象和指定的端口号要一致.
     15         ServerSocket serverSocket = new ServerSocket(8888);
     16         while(true) {
     17             //2.使用ServerSocket对象中的的方法accept,获取到请求的客户端对象Scoket
     18             // 创建多线程,提高可以同时与多个客户端进行数据的传输,提高效率
     19             Socket socket = serverSocket.accept();//阻塞(如果没有客户端连接,程序会停止在这个地方)
     20             new Thread(() -> {
     21                 try {
     22                     //获得客户端Socket对象
     23                     //给保存的文件设置随机名,避免覆盖
     24                     long time = System.currentTimeMillis();
     25                     //3.使用Socket对象中的方法getInputSteam() 获得输入流
     26                     InputStream is = socket.getInputStream();
     27                     FileOutputStream fos = new FileOutputStream(new File("C:\123\123", time + ".jpg"));
     28                     byte[] list = new byte[1024];
     29                     int len;
     30                     //4.使用网络字节输入流InputStream对象中的read()方法
     31                     while ((len = is.read(list)) != -1) {
     32                         fos.write(list, 0, len);
     33                     }
     34                     fos.close();
     35                     //5. 使用Socket对象中的getoutputStream()方法获得输出流
     36                     OutputStream os = socket.getOutputStream();
     37                     //6.使用网络字节输出流OutputSteam对象中的write()方法
     38                     os.write("你好,图片传输完毕".getBytes());
     39 
     40                     //7. 释放资源
     41                     socket.close();
     42                 } catch (IOException e) {
     43                     e.printStackTrace();
     44                 }
     45             }).start();
     46 
     47         }
     48     }
     49     public static void method01() throws IOException {
     50 
     51         //1.创建一个服务器对ServerSocket对象和系统指定的端口号要一致.
     52         ServerSocket server = new ServerSocket(8888);
     53         /*让服务器一直处于监听状态(死循环accept方法)
     54          * 有一个客户端上传文件,就保存一个文件.
     55          * */
     56         while (true){
     57             /* 在步骤1 与 步骤2 之间会卡主, 等待客户端连接,连接了才会进行下一步*/
     58 
     59             //2.使用ServerSocket对象中的的方法accept,获取到请求的客户端对象Scoket
     60             Socket socket = server.accept();
     61 
     62 
     63             //3.使用Socket对象中的方法getInputSteam()
     64             // 得到一个输入流,该输入流就可以调用read()方法
     65             InputStream is = socket.getInputStream();
     66             // 4.使用网络字节输入流InptuSteam对象中的read
     67 
     68             //文件夹 在是定文件夹下创建文件
     69             File dir = new File("C:\123\123");
     70             /*     //自动生成一个时间戳,自动生成文件名,利用毫秒值当做文件名
     71              *      用System.currentTimeMilis()方法获取当前系统的毫秒值,
     72              *      再加上一个随机数. 保证文件名是不重复的.
     73              * */
     74             long time = System.currentTimeMillis();
     75             String filename =time+new Random().nextInt(1000)+"";
     76             /*如果该文件夹不存在,则生成这个文件夹*/
     77             if(!dir.exists()){
     78                 dir.mkdirs();
     79             }
     80             /**/
     81             FileOutputStream fos = new FileOutputStream(new File(dir,filename+".jpg"));
     82 
     83             //  FileOutputStream fos = new FileOutputStream(destination);
     84             byte[] bs = new byte[1024];
     85             int len;
     86             while((len=is.read(bs))!=-1)
     87             {
     88                 fos.write(bs,0,len);
     89             }
     90             //告诉
     91             fos.close();
     92 
     93 
     94             //5.使用Socket对象中的方法 getoutputSteam 回写 收到了就谢谢.
     95             //利用网络指向客户端.往客户端回写数据.
     96             OutputStream os = socket.getOutputStream();
     97             //都是字节流,转换为字节再写回去.
     98             os.write("收到谢谢".getBytes());
     99             /*socket.close();
    100 
    101             server.close();*/
    102 
    103         }
    104 
    105 
    106 
    107     }
    108 }

    运行结果:

  • 相关阅读:
    Android的各版本间的区别总结
    深入浅出Android开发之Surface介绍
    android中完全退出当前应用程序的四种方法
    android离线地图源码
    坐标系
    mysql安装
    linux磁盘空间清理
    HttpClient教程
    TIME_WAIT过多
    c3p0配置详解
  • 原文地址:https://www.cnblogs.com/battlecry/p/9525762.html
Copyright © 2011-2022 走看看