网络编程1-TCP\IP
网络通信协议
双方若要通信,就有约定, 这些约定就是通信协议。
编写网络应用该程序,首先要明确需要的网络协议,TCP/IP协议是网络应用程序的首选
计算机网络分类
规模区分 | |
---|---|
局域网 | LAN |
城域网 | MAN |
广域网 | WAN |
Internet就是世界上最大的广域网
通信协议负责的有:
传输速率、传输代码、代码结构、传输控制步骤、出错控制等等指定处理标准。
通信协议的构成:
1、语义:决定双方对话类型
2、语法:决定双方对话的 格式
3、变化规则:决定通信双方的应答关系。
模型
ISO国际标准化组织提出的模型是OSI,分为7层,但是太理想化,未推广。
IP协议(Internet Protocol),它能提供网络间链接的完善功能
TCP协议(Transmission Control Protocol),它规定了一种可靠的数据信息传递服务。
由于TCP与IP是同一时期设计的,功能互补,所以一般统称为TCP/IP协议,是事实上的国际标准。它只分了4层。
这里主要说的是传输层的TCP、UDP以及网络层的IP
IP地址
IP地址,就是给一个计算机的标识号,区分每台计算机,就像学号。
IP地址是数字型的,由32位二进制整数表示,但是难以记忆
——于是分成4个8位的二进制数字,每一段转换为0-255的十进制整数,例如123.56.122.123。
端口号
通过IP地址可以唯一标识网络上的一个通信实体(计算机),但是一个通信实体可以有多个通信程序同时提供网络服务,比如一台计算机同时运行QQ和微信,这就需要使用端口号来区分不同的应用程序,不同的应用程序处理不同端口上的数据。
格式
16位的整数,0-65535,共有2^16个。
应该使用哪些?
0-1023:用于一些致命的网络服务和应用
用户的普通应用程序使用其余的端口号,以避免冲突
InetAddress
Java中这个类。InetAddress = Internet Address = IP地址
它有两个子类,Inet4Address类和Inet6Address类,分别而代表IPv4和IPv6的地址
这个类没有构造方法,但是有5个静态方法来获取InetAddress实例
static InetAddress[] getALLByName(String host) 给定主机名,返回其IP地址
static InetAddress getByAddress(byte[] addr) 给定IP,返回InetAddress对象
static InetAddress getByAddress(String host,byte[] addr)根据给定的hostname和IP创建InetAddress
static InetAddress getByName(String host) 给定主机名,确定主机IP
static InetAddress getLocalHost() 返回IP地址对应的InetAddress实例
常用方法
String getCanonicalHostName() 获取此IP地址的全限定的域名
String getHostAddress() 得到IP地址
String getHostName() 得到这个IP地址的主机名
boolean isReachable(int timeout) 判定:指定时间内能否到达这个地址
得到本机IP
InetAddress localHost = InetAddress.getLocalHost();
System.out.println("本机IP地址:" + localHost.getHostAddress());
rhino.acme.com
本机IP地址:192.168.3.19
例
package test1;
import java.net.InetAddress;
public class Class1 {
public static void main(String[] args) throws Exception{
//返回本机IP地址对应的InetAddress实例
InetAddress localHost = InetAddress.getLocalHost();
System.out.println("本机IP地址:" + localHost.getHostAddress());
//根据主机名返回对应的InetAddress实例
InetAddress ip = InetAddress.getByName("www.mobiletrain.org");
System.out.println("2秒内是否可达:" + ip.isReachable(2000));
System.out.println("对方的IP地址:" + ip.getHostAddress());
System.out.println("堆放点主机名:" + ip.getHostName());
}}