A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 时光。 初级黑马   /  2018-4-23 14:52  /  568 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 小石姐姐 于 2018-4-26 14:03 编辑

网络编程笔记

网络编程 :  让不同计算机上运行的程序可以通过网络进行数据交换
Socket`: 中文译名为 "套接字"
网络通信三要素
  • 传输协议


TCP  :  传输控制协议
特点:
无连接的不可靠协议
数据传输大小限制为64K(一个包)
不需要建立连接即可传输
数据发送速度快, 发送方只发送数据, 不检查接收方是否真正接收到数据, 所以数据可能有丢包的情况
适用场景:
适合实时性要求强的场合, 比如网络电话等环境, 这种协议延迟很小
UDP  :  用户数据报协议
特点:
需要建立连接的可靠协议
没有数据传输大小的限制
在传输前需要先建立连接(三次握手)
它的重发机制保证了数据传输的准确性, 但因为需要接收方发回验证信息, 所以数据发送时间长, 数据流量大
适用场景:
这种方式适合准确性要求强的场合, 比如金融系统, 视频点播, 用户可以等待数据传输但是不能忍受错误
  • IP地址


网络设备的标识
  • 端口号


标识使用网络通信的进程的逻辑地址, 用于定位一个主机上的具体服务
查看端口号: netstat -an
java.net.InetAddress类: 用于表示IP地址对象 (InetAddress的实例包含 IP 地址,还可能包含相应的主机名)
  • 静态方法

    • static InetAddress getLocalHost(): 获取本机的InetAddress对象
    • static InetAddress getByName(String host): 根据主机名IP的字符串获取主机的InetAddress对象
    • static InetAddress getLoopbackAddress(): 获取回环地址的InetAddress对象. 即127.0.0.1或localhost
    • static InetAddress getByAddress(byte[] addr): 根据IP获取InetAddress对象

      • 如: InetAddress.getByAddress(new byte[]{(byte)192, (byte)168, (byte)1, (byte)1});



  • 成员方法

    • String getHostAddress(): 返回主机的IP地址
    • String getHostName(): 返回主机名



  • java.net.DatagramSocket类: 基于UDP协议的Socket

    • 构造方法

      • DatagramSocket(): 创建DatagramSocket对象, 随机分配端口号
      • DatagramSocket(int port): 创建DatagramSocket对象, 指定端口号


    • 成员方法

      • void send(DatagramPacket p): 发送数据包
      • void receive(DatagramPacket p): 接收数据, 数据保存在DatagramPacket对象中
      • void close(): 关闭通信, 释放资源



  • java.net.DatagramPacket类: UDP数据包

    • 构造方法

      • DatagramPacket(byte[] msg, int msgLength, InetAddress host, int port): 创建数据包对象, 指定数据, 目标主机对象, 端口
      • DatagramPacket(byte[] buf, int length): 创建数据包对象, 接收数据为length的数据, 存入byte数组中


    • 成员方法

      • InetAddress getAddress(): 获取数据包发送方的InetAddress对象        
      • byte[] getData(): 获取包中的数据, 以byte数组形式
      • int getLength(): 获取数据包中数据的长度, 即byte数组的长度
      • int getPort(): 获取发送方端口号




UDP不区分发送端和客户端, 所以都使用DatagramSocket即可
java.net.Socket类: 基于TCP协议的Socket, 作为客户端
  • 构造方法

    • Socket(InetAddress add, int port): 创建TCP客户端对象


  • 成员方法

    • OutputStream getOutputStream(): 获取输出流对象, 用于发送数据
    • InputStream getInputStream(): 获取输入流, 用于接收数据
    • void close(): 释放资源



java.net.ServerSocket: TCP服务端
  • 构造方法

    • ServerSocket(int port): 创建一个TCP服务端, 并监听指定端口


  • 成员方法

    • Socket accept(): 监听数据, 会阻塞. 收到数据后返回Socket对象
    • void close(): 关闭Socket



  • Socket客户端

    • 发送数据给服务端: 使用Socket对象获取输出流对象OutputStream, write(byte[])
    • 接收服务端的数据: 使用Socket对象获取输入流对象InputStream, read(byte[])


  • ServerSocket服务端

    • 接收客户端的数据: 使用accpet()方法返回的Socket对象获取输入流对象InputStream, read()
    • 发送数据给客户端: 使用accpet()方法返回的Socket对象获取输出流对象OutputStream, write()




0 个回复

您需要登录后才可以回帖 登录 | 加入黑马