网络编程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());
}}