zoukankan      html  css  js  c++  java
  • JAVASE02---Unit06: TCP通信 、 UDP通信

    Java的网络编程:小程序能实现记时的聊天室

    网络通讯的底层协议有两个:
    一、TCP协议:
    可靠的传输协议。长连接,一直连着发送。一发一回应。弊端:啰嗦,占用带宽高,传输速度慢!

    二、UDP协议
    不可靠传输协议。简洁,对方爱收不收,草率。快,不废话不罗嗦。无所谓!(网络上UDP协议用的更多)
    例如:网游、视频传输、语言(卡了,丢包了。哈哈哈哈o(^▽^)o)
    只说一便,不重复,不罗嗦。


    C-S:客户端对服务端(用户电脑上会有大量的客户端)
    --->浏览器(统一客户端)

    B-S:浏览器对服务端(算C-S的一种)

    手机又回到了C-S,大众的东西就不能做的很个性。

    QQ的浏览器版就很土。

    java中就主要讲TCP协议了,来实现聊天室。

    java封装的好处,帮你屏蔽底层复杂的事情。上层公开出一个非常简洁的可调用的技术。
    例如,开车就只要会挂档和方向盘、油门,就可开车。底层发动机怎么运行不需要。


    Socket:套接字(插座)
    电话,无线电通讯

    ***********************************************************************************

    先启动服务端,再启动客户端。

    怎么看客户端的输出?
    在控制台console右边有个小电脑图标,下拉框,可切换。
    快速切换就直接点图标。

    以上是自己和自己连。
    下面是两个人互相连。
    知道对方的IP地址是多少?

    windows:输入cmd--->命令提示符。
    再输入---> ipconfig

    linux:打开终端。
    再输入---> /sbin/ifconfig

    **********************************************************************************
    **********************************************************************************
    package day11;

    import java.io.BufferedReader;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.net.ServerSocket;
    import java.net.Socket;

    public class Server {
     /**
      * java.net.ServerSocket
      * 运行在服务端的Socket,主要有两个作用:
      * 1:向操作系统申请服务端口,客户端就是通过这个端口找到服务端应用程序的
      * 2:监听服务端口,当客户端实例化Socket并通过ServerSocket服务端口发起连接时,
      *   ServerSocket就能感知到并实例化一个Socket与该客户端通讯。
      */
     private ServerSocket server;
     public Server(){
      try {
       /**
        * 实例化ServerSocket的同时指定服务端口
        * 该端口不能与操作系统上其他应用程序已经申请的端口冲突,否则实例化失败,
        * 抛出地址被占用的异常。
        */
       server= new ServerSocket(8088);
      } catch (Exception e) {
       
      }
     }
     public void start(){
      try {
       /*
        * ServerSocket提供方法
        * Socket accept()
        * 该方法是一个阻塞方法,作用是监听服务端口,直到一个客户端连接过来为止,
        * 然后返回一个Socket实例,通过该Socket就可以与刚连接的客户端交互数据了。
        */
       System.out.println("等待客户端连接...");
       Socket socket= server.accept();
       System.out.println("一个客户端连接了!");
       /*
        * Socket提供了方法:
        * InputStream getInputStream()
        * 通过该输入流可以读取远端计算机发送过来的消息。
        */
       InputStream in= socket.getInputStream();
       InputStreamReader isr= new InputStreamReader(in,"UTF-8");
       BufferedReader br= new BufferedReader(isr);
       String message= br.readLine();
       System.out.println("客户端说:"+message);
       
      } catch (Exception e) {
       e.printStackTrace();
      }
     }

     public static void main(String[] args) {
      try {
       Server server= new Server();
       server.start();
      } catch (Exception e) {
       e.printStackTrace(); 
      }

     }

    }


    **********************************************************************************
    **********************************************************************************
    package day11;

    import java.io.OutputStream;
    import java.io.OutputStreamWriter;
    import java.io.PrintWriter;
    import java.net.Socket;

    /**
     * 聊天室客户端
     * @author Daisy.yang
     *
     */
    public class Client {
     /*
      *java.net.Socket
      *Socket封装了TCP协议,使用它可以进行TCP通讯。
      */
     private Socket socket;
     /**
      * 构造方法,用来初始化客户端
      */
     public Client(){
      try {
       /*
        * 实例化Socket时需要传入两个参数:
        * 1:服务端计算机的IP地址,通过它可以找到网络上的服务端计算机。
        * 2:服务端口,该端口是服务端程序启动后向它的计算机申请的,
        *    我们通过这个端口就可以找到运行服务端计算机上的这个服务端
        *    应用程序了。
        *   
        *  而且实例化Socket过的程序就是连接服务端的过程,
        *  在实例化时就会按照给定的地址与端口进行网络连接,
        *  若服务端没有响应,这里会抛出异常。
        * 
        *  localhost:表示本机地址,连接本机。
        *  127.0.0.1
        *  或者看自己的IP地址
        */
       System.out.println("正在连接服务端...");
       socket= new Socket("localhost",8088);
       System.out.println("已连接!");
      } catch (Exception e) {
       e.printStackTrace();
      }
     }
     /**
      * 开始客户端工作的方法
      */
     public void start(){
      try {
       /*
        * Socket提供方法:
        * OutputStream getOutputStream()
        * 该方法会获取一个输出流,通过该流写出的数据会发给远端计算机
        * 对于客户端这边而言,远端就是服务端。
        */
       OutputStream out= socket.getOutputStream();
       OutputStreamWriter osw= new OutputStreamWriter(out,"UTF-8");
       PrintWriter pw= new PrintWriter(osw);
       pw.println("Hello!服务端!");
       pw.flush();
       
      } catch (Exception e) {
       e.printStackTrace();
      }
     }
     
     public static void main(String[] args) {
      try {
       Client client = new Client();
       client.start();
       
      } catch (Exception e) {
       e.printStackTrace();   
      }
     }

    }


    **********************************************************************************

  • 相关阅读:
    linux 邮件服务器
    Nginx学习之keepalive
    explain 和 desc 详解
    mysql 常用语句
    loop设备及losetup命令
    cryptsetup文件系统加密
    ftp主动与被动模式详解
    大型网站关键技术
    大访问量网站架构设计
    Mysql 的事务隔离级别
  • 原文地址:https://www.cnblogs.com/sneg/p/7804661.html
Copyright © 2011-2022 走看看