zoukankan      html  css  js  c++  java
  • (4)优化TCP编写 客服端上传图片,服务端给客服端发消息问好

    (4)优化TCP编写 客服端上传图片,服务端给客服端发消息问好

    此demo的在上一个的基础上实现客服端与服务器端互相发送消息给对方,提高数据的读与取的效率,首先要先启动服务端,否则报错,因为TCP是可靠协议,所以没有对应的服务端时会报错,发送数据为图片

    一.编写TCP协议服务端

     1   package demo.soket.tcp;
     2  3   import java.io.BufferedInputStream;
     4   import java.io.BufferedOutputStream;
     5   import java.io.FileOutputStream;
     6   import java.io.IOException;
     7   import java.io.OutputStream;
     8   import java.net.ServerSocket;
     9   import java.net.Socket;
    10 11   //TCP协议服务端
    12   public class Server {
    13       public static void main(String[] args) {
    14           /**
    15            * 1.创建服务端ServerSocket对象
    16            * 2.监听socket连接
    17            * 3.通过返回的socket对象来获取io流里面的数据
    18            * 4.打印数据
    19            */
    20           //1.
    21           ServerSocket server=null;
    22           try {
    23               server=new ServerSocket(12345);
    24               //2.
    25               Socket client=server.accept();
    26               //3.
    27               //字节缓冲输入流,效率高
    28               BufferedInputStream bis=new BufferedInputStream(client.getInputStream());
    29               System.out.println("bis"+bis);
    30               
    31               //给客服端发消息
    32               OutputStream out=client.getOutputStream();
    33               String result="欢迎你的到来:"+client.getLocalAddress();
    34               out.write(result.getBytes());
    35               
    36               //接收客服端胡消息
    37               BufferedOutputStream os=new BufferedOutputStream(new FileOutputStream("客户端发过来的图片.jpg"));
    38               byte[] b=new byte[1024];
    39               int len=0;
    40               while((len=bis.read(b))!=-1) {
    41                   os.write(b, 0, len);
    42                   os.flush();//刷出缓冲流中的数据,关闭连接前一定要刷,否则会数据缺失
    43               }
    44               //缓冲流
    45               os.close();
    46               client.close();
    47               bis.close();
    48               server.close();
    49           } catch (IOException e) {
    50               e.printStackTrace();
    51           }
    52       }
    53   }

    二.编写TCP协议客服端

     1  package demo.soket.tcp;
     2  3   import java.io.BufferedInputStream;
     4   import java.io.BufferedOutputStream;
     5   import java.io.FileInputStream;
     6   import java.io.IOException;
     7   import java.io.InputStream;
     8   import java.net.Socket;
     9   import java.net.UnknownHostException;
    10 11   /**
    12    * TCP特点:
    13    * 1.建立连接,形成传输数据的通道
    14    * 2.在链接中进行大量数据传输
    15    * 3.通过三次握完成连接,是可靠协议,所以没有对应的服务端时会报错
    16    * 4.必建立连接,效率会稍低些
    17    * @author Administrator
    18    *
    19    */
    20   public class Client {
    21       public static void main(String[] args) {
    22           /**
    23            * 1.创建一个客服端的socket对象
    24            * 2.建立连接
    25            * 3.通过io流在管道里面传输数据
    26            * 写数据:输出流 getOutputStream() 
    27            * 接收数据:输入流 getInputStream() 
    28            * 4.关闭socket
    29            */
    30           //1.|2.
    31           Socket client=null;
    32           try {
    33               client=new Socket("192.168.95.2",12345);
    34               //3.
    35               BufferedOutputStream os=new BufferedOutputStream(client.getOutputStream());
    36               String path="C:\Users\Administrator\Pictures\微信图片_20200629170031.jpg";
    37               BufferedInputStream buf=new BufferedInputStream(new FileInputStream(path));
    38               byte[] b=new byte[1024];
    39               int len=0;
    40               while((len=buf.read(b))!=-1) {
    41                   os.write(b, 0, len);
    42                   os.flush();//关闭连接前一定要刷,否则会数据缺失
    43               }
    44               
    45               //获取服务端发过来的消息
    46               InputStream in=client.getInputStream();
    47               byte[] bi=new byte[1024];
    48               int leng=0;
    49               while((leng=in.read(bi))!=-1) {
    50                   System.out.println("收到服务器通知:"+new String(bi,0,leng));
    51               }
    52               //关闭读文件操作
    53               buf.close();
    54               os.close();
    55           } catch (UnknownHostException e) {
    56               e.printStackTrace();
    57           } catch (IOException e) {
    58               e.printStackTrace();
    59           }finally {
    60               //4.
    61               if(client!=null) {
    62                   try {
    63                       client.close();
    64                   } catch (IOException e) {
    65                       e.printStackTrace();
    66                   }
    67               }
    68           }
    69       }
    70   }

    三 .demo运行

    刷新项目后会多一张上传的图片

  • 相关阅读:
    UICollectionView的简单使用(一)
    天气预报接口IOS版OC:SmartWeather API中key的计算方法
    IOS下Base64加密
    IOS下DES加密
    IOS的URL中文转码
    CTE Recursion Performance
    走过而立之年的Coder
    iOS多线程编程之锁的理解
    iOS设置PCH文件
    程序员:伤不起的三十岁
  • 原文地址:https://www.cnblogs.com/KdeS/p/13275007.html
Copyright © 2011-2022 走看看