zoukankan      html  css  js  c++  java
  • 网络编程java

    网络编程
    1.网络编程概述
    (1).C/S结构:指客户端与服务端结构,常见程序QQ;
    (2).B/S结构:指浏览器和服务器的结构;
    2.网络编程的三要素:
    *IP地址
    *端口号
    *通信协议(UDP/TCP)

    *IP地址类(InetAddress类)
    一个IP地址就对应一个InetAddress类的对象。
    InetAddress类使用静态方法
    (1).获得本地主机的IP地址对象
    InetAddress ip = InetAddress.getLocalHost();
    ip.getHostName();获取主机名
    ip.getHostAddress();获得ip地址字符串
    根据IP地址字符串或主机名获得IP地址对象
    InetAddress ip02 = InetAddress.getByName("ip地址");
    UDP协议(用户数据包协议)
    1.UDP协议的特点:
    *面向无连接协议
    * 只管发送,不确认对方是否收到。
    * 基于数据包(报)进行数据传输。
    * 发送数据大小限制在64k以内。
    * 因为面向无连接,速度快但不可靠
    2.UDP使用场景
    * 即时通讯(QQ,微信,陌陌.....)
    * 在线视频
    * 语言通话
    3.用法:
    *发送端
    (1).创建数据包对象
    DatagramPacket dp = new DatagramPacket(要发送的内容,长度,接收端的ip地址,端口号 );
    (2).创建发送端的发送对象
    DatagramSocket ds=new DatagramSocket();
    ds.send(dp);发送数据包
    ds.close();关闭资源
    *接收端
    (1).创建接收端的Socket对象
    DatagramSocket ds=new DatagamSocket(端口号);
    // 创建字节数组
    byte[] buf = new byte[1024];
    // 创建数据包对象
    DatagramPacket dp = new DatagramPacket(buf,buf.length);
    // 接收数据包
    ds.receive(dp);

    // 获得实际接收内容的长度
    int len = dp.getLength();
    // 输出内容
    System.out.println(new String(buf,0,len));
    // 获得发送端的IP和端口号
    String sendIP = dp.getAddress().getHostAddress();
    int sendPort = dp.getPort();
    System.out.println("sendIP = " + sendIP);
    System.out.println("sendPort = " + sendPort);
    TCP协议(传输控制协议)
    1.TCP协议的特点
    * 面向连接的协议。
    * 通过三次握手建立连接,形成数据传输通道。
    * 通过四次挥手断开连接
    * 基于IO流进行数据传输
    * 传输数据大小没有限制
    * 因为面向连接,速度慢但可靠
    2.TCP协议使用场景
    * 文件上传和下载
    * 邮件发送和接收
    * 远程登录
    TCP协议通讯相关的两个类
    * Socket
    * 客户端Socket
    * 一个该类的对象就代表一个客户端程序
    * ServerSocket
    * 服务器端Socket
    * 一个该类的对象就代表一个服务器程序

    Socket类构造方法
    * Socket(String host, int port)
    * 根据服务器IP地址和端口号创建客户端Socket对象
    * 一旦执行该方法就会立即连接服务器,如果连接失败直接抛异常。
    * host:服务器端IP地址
    * port:服务器端的端口号

    Socket类常用方法
    * OutputStream getOutputStream(); 获得字节输出流对象
    * InputStream getInputStream(); 获得字节输入流对象
    用法:
    客户端
    // 根据服务器IP地址和端口号创建客户端Socket对象
    Socket socket = new Socket("192.168.106.45", 8888);
    // 要发送的内容
    String content = "约吗,TCP服务器端";
    // 获得字节输出流对象
    OutputStream out = socket.getOutputStream();
    // 往服务器端输出数据
    out.write(content.getBytes());

    // 获得字节输入流对象
    InputStream in = socket.getInputStream();
    // 创建字节数组:用来存储服务器返回的数据
    byte[] buf = new byte[1024];
    // 读取服务器端返回的数据
    int len = in.read(buf);
    System.out.println("len = " + len);
    System.out.println(new String(buf,0,len));
    // 关闭Socket断开连接
    socket.close();

    服务端
    ServerSocket类构造方法
    * ServerSocket(int port)
    * 根据指定的端口号创建服务器Socket对象
    * 相当于开启一个服务器

    ServerSocket类常用方法
    * Socket accept();
    * 等待客户端连接并获得与客户端关联的Socket
    * 是一个阻塞方法,如果没有客户端连接则当前线程的代码无法继续运行。
    用法;// 根据指定的端口号创建服务器Socket对象
    ServerSocket serverSocket = new ServerSocket(8888);
    System.out.println("开启服务器......");
    // 等待客户端连接并获得与客户端关联的Socket
    Socket socket = serverSocket.accept();
    // 获得字节输入流对象
    InputStream in = socket.getInputStream();
    // 创建字节数组:用来存储客户端发送过来的数据
    byte[] buf = new byte[1024];
    // 读取客户端发送的数据
    int len = in.read(buf);
    System.out.println("len = " + len);
    System.out.println("接收到的数据 = " + new String(buf,0,len));
    // 获得字节输出流对象
    OutputStream out = socket.getOutputStream();
    // 往客户端输出数据
    out.write("不约而同".getBytes());
    // 关闭服务器:在实际开发中服务器一般是不关闭的。
    serverSocket.close();

  • 相关阅读:
    Starlink星链计划能与5G抗衡?看一下马斯克吹过的牛逼
    代码安全性和健壮性:如何在if和assert中做选择?
    都说软件架构要分层、分模块,具体应该怎么做(一)
    物联网网关开发:基于MQTT消息总线的设计过程(上)
    Linq 集成化查询(1)
    给自己定位的技术总监
    lucene.net初接触
    人生就像一系统软件
    用Microsoft.Practices.Unity实现简单的依赖注入
    flv播放器参数
  • 原文地址:https://www.cnblogs.com/flzidea/p/10078358.html
Copyright © 2011-2022 走看看