黑马程序员_网络编程

来源:互联网 发布:linux系统死机 编辑:程序博客网 时间:2024/05/17 08:51

---------------------- android培训、java培训、期待与您交流! ----------------------

今天进入网络编程的学习了,感觉就上了一个档次了,网络编程的主要内容是关于网络模型,网络通讯要素等相关知识。

网络模型分为osi参考模型和tcp/ip参考模型,osi参考模型划分相对较细腻,共分为七层,分别是由上至下:应用层,表示层,会话层,传输层,网络层,数据链路层,物理层。

与之相对应的tcp/ip参考模型则相对简洁共分为四层,分别是由上至下:应用层,传输层,网际层,主机至网络层。其中osi的应用层,表示层,会话层则对应tcp/ip的应用层,而传输层和网络层则是相对应的,最后是osi 的数据链路层,物理层则对应于tcp/ip的主机至网络层。而平时我们编写代码进行通讯则位于传输层。

   网络通讯要素则包含ip地址,端口号,传输协议。

网络传输步骤:

1,找到对方主机的ip

2,数据要发送到对方指定的应用程序上,为了标识这些应用程序,给这些应用程序都用数字进行标识,为了方便称呼这个数字,叫做端口。

3,定义通信规则,这些通信规则称为协议,国际组织定义了通用协议Tcp/ip。

网络编程使用的是java.net.*;包,其中用来描述网络地址的是InetAddress类,这个类比较特殊,它没有构造函数,但是有静态方法和非静态方法供调用,譬如静态方法getLocalHost()

会返回本地主机的主机名和ip地址,但是值得注意的是要抛出UnknownHostException。下面是一段示例代码:

import java.net.*;

public classInetAddressDemo {

 

    public static void main(String []args)throws Exception

    {

        InetAddressi=InetAddress.getLocalHost();

        System.out.println(i.toString());

        System.out.println("Name:"+i.getHostName());

        System.out.println("Address:"+i.getHostAddress());

    }

}

 

此外,在InetAddress类中还有一个比较厉害的方法是getByName(String host)方法,它的能够返回给主机名的情况下的ip地址,不过它所返回的是一个InetAddress对象,需要定义对象来对其进行接收,下面一段示例代码:

import java.net.*;

public classInetAddressDemo {

 

    public static void main(String []args)throws Exception

    {

        InetAddressi=InetAddress.getByName("127.0.0.2");

        System.out.println(i.toString());

        System.out.println("Name:"+i.getHostName());

        System.out.println("Address:"+i.getHostAddress());

    }

}

有一点还需注意的是如果网络上的主机名和ip地址并没有映射关系,则在程序运行之后的主机名仍然为ip地址,当然我们可以这样

InetAddress i=InetAddress.getByName("www.baidu.com");

前提是联网的情况下,返回百度的主机ip地址,但是作为大型搜索引擎,主机不止一台,因此返回的则是一个InetAddress数组,此时我们则要用到InetAddress中的getAllByName(String host)方法:

InetAddress[] ips =InetAddress.getAllByName("www.baidu.com");

---------------------- android培训、java培训、期待与您交流! ----------------------