JAVA网络编程

JAVA网络编程

网络编程三要素:

  • IP地址:InetAddress 
    网络中设备的标识,不易记忆,可用主机名
  • 端口号 
    用于标识进程的逻辑地址,不同进程的标识
  • 传输协议 
    通讯的规则 常见协议:TCP,UDP

相关知识点:

在网络编程三要素中,有很多相关的需要了解的: 
关于Ip地址:

ip地址是网络中计算机的唯一标识 
计算机只能识别二进制的数据,所以我们的ip地址应该是一个二进制的数据 
eg:ip:192.168.1.100 
换算 1100000 10101000 00000001 01100100 
计算机在配置ip地址的时候把ip地址的每一个字节上的数据换算成十进制,然后用.分开来表示 “点分十进制”

IP地址的组成:网络号段+主机号段 
A类:第一号段为网络号段+后三段的主机号段 
一个网络号段可分配 256256256 = 16777216台主机 
B类:前二号段为网络号段+后二段的主机号段 
一个网络号段可分配 256*256 = 65536台主机 
C类:前三号段为网络号段+后一段主机号段 一个网络号段可分配 256台主机 
D类 E类 保留号段

A类 1.0.0.1--127.255.255.254   
B类 128.0.0.1--191.255.255.254   
C类 192.0.0.1--223.255.255.254
D类 224.0.0.1-239.255.255.254
E类 240.0.0.1--247.255.255.254   

私有号段:在互联网中不可用,在局域网中可用
10.x.x.x 
172.16.0.0-172.31.255.255   
192.168.x.x是私有地址
特殊的ip地址 回环地址   
127.0.0.1   
x.x.x.255 广播地址
x.x.x.0 网络地址

网络模型

计算机网络之间以何种规则进行通信,就是网络模型研究问题。 
网络模型一般是指

    OSI(Open System Interconnection开放系统互连)参考模型
    TCP/IP参考模型

API

InetAddress

此类表示互联网协议 (IP) 地址。

static InetAddress[] getAllByName(String host) 
          在给定主机名的情况下,根据系统上配置的名称服务返回其 IP 地址所组成的数组。 
static InetAddress getByAddress(byte[] addr) 
          在给定原始 IP 地址的情况下,返回 InetAddress 对象。 
static InetAddress getByAddress(String host, byte[] addr) 
          根据提供的主机名和 IP 地址创建 InetAddress。 
static InetAddress getByName(String host) 
          在给定主机名的情况下确定主机的 IP 地址。 



static InetAddress getLocalHost() 
          返回本地主机。 

 boolean isReachable(int timeout) 
          测试是否可以达到该地址。 
 boolean isReachable(NetworkInterface netif, int ttl, int timeout) 
          测试是否可以达到该地址。 

端口号

正在运行的程序的标识 也就是进程的标识

  • 物理端口 网卡口
  • 逻辑端口 我们指的就是逻辑端口 
    A:每个网络程序都会至少有一个逻辑端口 
    B:用于标识进程的逻辑地址,不同进程的标识 
    C:有效端口:0~65535,其中0~1024系统使用或保留端口。

协议

通信的规则

UDP

* 概述:   
  将数据源和目的封装成数据包中,<font color = red>不需要建立连接;每个数据报的大小在限制在64k</font>;因无连接,是不可靠协议;不需要建立连接,速度快

DatagramSocket

此类表示用来发送和接收数据报包的套接字。

构造方法
  • DatagramSocket(int port, InetAddress laddr) 
    创建数据报套接字,将其绑定到指定的本地地址。
  • DatagramSocket() 
    构造数据报套接字并将其绑定到本地主机上任何可用的端口。
发送数据方法
  • void receive(DatagramPacket p) 
    从此套接字接收数据报包。 此方法在接收到数据报前一直阻塞。数据报包对象的 length 字段包含所接收信息的长度。如果信息比包的长度长,该信息将被截短。

  • void send(DatagramPacket p) 从此套接字发送数据报包。

DatagramPacket

此类表示数据报包。

构造方法
  • DatagramPacket(byte[] buf, int length) 
    构造 DatagramPacket,用来接收长度为 length 的数据包。

  • DatagramPacket(byte[] buf, int offset, int length, InetAddress address, int port) 构造数据报包,用来将长度为 length 偏移量为 offset 的包发送到指定主机上的指定端口号。

    解析
  • byte[] getData() 返回数据缓冲区。
  • int getLength() 返回将要发送或接收到的数据的长度。
Exception

java.net.BindException :Address already in use:Cannot bind 
多次启动接收端会导致端口被占用

TCP

 * 概述   
    建立连接,形成传输数据的<font color = red>通道</font>;在连接中进行大数据量传输;通过三次握手完成连接,是可靠协议;必须建立连接,效率会稍低

Socket

客户端 Socket

此类实现客户端套接字(也可以就叫“套接字”)。套接字是两台机器间通信的端点。

  • Socket(InetAddress address, int port) 创建一个流套接字并将其连接到指定 IP 地址的指定端口号。
  • Socket(String host, int port) 创建一个流套接字并将其连接到指定主机上的指定端口号。

  • OutputStream getOutputStream() 返回此套接字的输出流。

  • void shutdownInput() 此套接字的输入流置于“流的末尾”。 指定输入流已经结束

  • void shutdownOutput() 输出流结束

服务端 ServerSocket
  • ServerSocket() 创建非绑定服务器套接字。
  • ServerSocket(int port) 创建绑定到特定端口的服务器套接字。

  • Socket accept() 侦听并接受到此套接字的连接。返回一个连接对应的socket对象

Socket通信

  • Socket套接字: 
    网络上具有唯一标识的IP地址和端口号组合在一起才能构成唯一能识别的标识符套接字。

socket包含了IP地址+端口 指定目的地的应用程序

  • Socket原理机制: 
    通信的两端都有Socket。 网络通信其实就是Socket间的通信。 数据在两个Socket间通过IO传输。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值