3.Java网络编程之IP

前面两篇博文我们已经简单了解了IP、端口、协议以及两种参考模型,我们现在重新从程序角度来看下这个参考模型.

如果我们从事的是Web网站开发,那么我们应该知道HTML是一种超文本标记语言 (Hyper Text Markup Language),而asp、php、jsp则是动态地生成HTML页面的技术,而HTTP是超文本传输协义,是基于WWW,HTML是超文本传输语言,是基于HTTP.因此我们开发时其实是在应用层进行开发。

如果我们从事的是网络编程则是在传输层和网际层进行开发。

IP协议:

理解:

我们如果想和网上某一台计算机进行通讯,首先我们需要要考虑如何和对方建立连接的问题,我们打算使用有线的光纤进行连接?还是通过有线电话或者手机进行通 讯?这就是数据链路层和物理层要干的事。建立连接后,你打算和谁进行通讯?如果是手机,你是不是需要拨通一个手机号码?但是如果是电脑的话,你想和谁聊天 如何确定?这时就需要通过网际层的IP协议来区分哪个IP是谁,这样你才可以准确和你想聊天的人进行聊天。

上面说了这么多概念废话,现在我们来实战用Java写一个小程序来获取本地计算机的主机名和IP。

我们要用到的知识点如下:

IPDemo.java源码如下:

import java.net.*;
class IPDemo
{
    public static void main(String[] args)throws Exception
    {
        InetAddress i=InetAddress.getLocalHost();
        System.out.println(i.toString());//打印本地主机名和本地IP地址
        System.out.println("address:"+i.getHostAddress());//打印本地IP地址
        System.out.println("name:"+i.getHostName());//打印本地主机名
    }
}

程序截图:

上面这个是获取的本地计算机的主机名和IP地址,那么能不能输入任意一个计算机的主机名就获取该计算机的相关信息呢?

在java.net包下提供了这么一个方法。

使用这个方法可以实现,但是要注意的是这个实现并不是所有都可以,那么为什么呢?



这里要补充一个知识点,我们知道在网络中是通过IP地址来区分谁是谁,哪个计算机是哪台计算机的。但是这个IP地址并不好记,因此后来引入了域名.当我们在浏览器地址栏输入:

http://www.baidu.com

这时候我们的计算机会首先访问本地计算机的C:\WINDOWS\system32\drivers\etc\host文件进行查询,

# Copyright (c) 1993-1999 Microsoft Corp.
#
# This is a sample HOSTS file used by Microsoft TCP/IP for Windows.
#
# This file contains the mappings of IP addresses to host names. Each
# entry should be kept on an individual line. The IP address should
# be placed in the first column followed by the corresponding host name.
# The IP address and the host name should be separated by at least one
# space.
#
# Additionally, comments (such as these) may be inserted on individual
# lines or following the machine name denoted by a ‘#‘ symbol.
#
# For example:
#
# 102.54.94.97 rhino.acme.com # source server
# 38.25.63.10 x.acme.com # x client host

#127.0.0.1 localhost
#203.208.46.146 www.google.com
#203.208.46.146 dl.google.com
#203.208.46.146 dl-ssl.google.com

查询后没有发现www.baidu.com,则向附近的DNS域名服务器发出请求,进行相同的查询。

虽然我没有看过DNS域名服务器数据存放格式但是推测至少应该有这样一个类似的文档。

......

#61.135.169.121 www.baidu.com#61.135.169.125 www.baidu.com#111.13.100.91 www.baidu.com
#221.176.187.238 www.sina.com.cn
......

当我们查询到www.baidu.com对应的ip后,DNS域名解析后,浏览器中的内容就变成了:

http://61.135.169.121

这时计算机开始向该IP对应的服务器发出请求,服务器接受请求后反馈给我们一个页面,我们就看到了百度的首页了。

因此,只有host文件或者DNS域名服务器中有对应的信息才可以查到。



了解完这个后,我们再来写这个程序。

我们现在要做的是输入一个域名,获取该域名所对应的IP。

IPDemo.java源码如下:

import java.net.*;
class IPDemo
{
    public static void main(String[] args)throws Exception
    {
        InetAddress i=InetAddress.getByName("www.baidu.com");
        System.out.println("address:"+i.getHostAddress());//打印该主机IP地址
        System.out.println("name:"+i.getHostName());//打印该主机主机名
    }
}

这里要注意的是由于百度要向很多用户提供服务,因此对应的IP不止一个。

程序运行截图:

附录:

使用站长工具查询结果:

使用IP.CN网站查询结果:

使用ping方式查询结果:

时间: 2024-10-06 21:13:09

3.Java网络编程之IP的相关文章

黑马程序员——Java网络编程之UDP传输

网络编程 网络模型 通讯要素:InetAddress(对象):ip地址,网络中设备的标识,不可记忆,可用主机名,本地回环地址:127.0.0.1主机名localhost 端口号 传输协议:UDP,将数据的源及目的封装成数据包中,不需要建立连接,每个数据包的大小限制在64K内,无连接,是不可靠协议,不需要建立连接,速度快.力求速度,不求数据的准确性.比如聊天软件,网络会议. TCP:建立连接,形成传输数据的通道,在连接中进行大数据量传输,通过三次握手完成连接,是可靠协议,必须建立连接效率稍低. S

【转】JAVA网络编程之Socket用法

JAVA网络编程之Socket用法 分类: JAVA2012-08-24 15:56 710人阅读 评论(0) 收藏 举报 在客户/服务器通信模式中,客户端需要主动建立与服务器连接的Socket,服务器端收到客户端的连接请求,也会创建与客户端连接的Socket.Socket可以看做是通信连接两端的收发器,客户端和服务店都通过Socket来收发数据. 1.构造Socket public Socket() 通过系统默认类型的 SocketImpl 创建未连接套接字 public Socket(Str

java网络编程之UDP实例

package Socket; import java.net.DatagramPacket; import java.net.InetAddress; public class Dgram { public static DatagramPacket toDatagram(String s, InetAddress destIA, int destPort) { byte[] buf = new byte[s.length() + 1]; s.getBytes(0, s.length(), b

java网络编程之TCP实例

Dgram类 package Socket; import java.net.DatagramPacket; import java.net.InetAddress; public class Dgram { public static DatagramPacket toDatagram(String s, InetAddress destIA, int destPort) { byte[] buf = new byte[s.length() + 1]; s.getBytes(0, s.leng

Java网络编程之Socket通信(二)

之前在前面已经介绍了Socket通信的一些基本原理,以及如何让客户端与服务器端建立通信,和实现通信的一些基本步骤(包括首先使得服务器端与客户端建立连接,建立连接之后,服务器端开始侦听客户端的请求,侦听到客户端的请求之后,通过输入输出流处理相关信息实现通信,最后通信完毕结束通信等一系列流程). 但是之前只是单个客户端与服务器进行通信,而我们实际应用中单个客户端的情况几乎不存在,都是多个客户端同时与服务器进行交互(这里同时交互就会出现并发性的问题,对于并发性的问题暂时还不是很懂,只知道有这个概念),

[学习笔记]Java网络编程之UDP通讯

1. 体系结构 计算机网络各层及其协议的集合,称为网络的体系结构.目前公认的计算机网络体系结构有概念清楚理论完善的OSI七层协议结构和实际上广泛应用的TCP/IP四层体系结构. 2. 各层概述 应用层:直接为用户的程序提供服务,如支持万维网应用的HTTP协议,支持电子邮件的SMTP协议等. 运输层:负责向两个主机中进程之间的通信提供服务,主要使用面向连接的TCP协议和无连接的UDP协议. 网络层:负责为分组交换网上不同主机提供地址交付的通信服务,该层使用IP协议,所以在该层传送的数据称之为IP数

Java网络编程之TCP、UDP

Java网络编程提供了两种协议:TCP(传输控制协议)和UDP(数据报协议).TCP(Transmission Control Protocol)是一种可靠的传输协议,传输时会采用"三次握手"端的方式建立连接,以保证数据的可靠性和安全性:而UDP(User Datagram Protocol)协议是一种不可靠的传输协议,发送的数据不一定能够接受的到,网上的聊天是工具一般采用的此协议.下面将详细的接受TCP和UDP的使用以及相应的编码. 一.TCP网络通信 Java中使用Socket(套

Java知多少(103)网络编程之IP地址和InetAddress类

Java语言的优势之一是Java程序能访问网络资源.Java提供一系列的类支持Java程序访问网络资源. TCP/IP协议和IP地址 为了进行网络通信,通信双方必须遵守通信协议.目前最广泛使用的是TCP/IP协议,它是Internet中各方所遵循的公共协议.TCP(Transport Control Protocol)是一种传输控制协议,IP(Internet Protocol)是一种网际协议,TCP/IP代表这两个协议的. TCP/IP分为四个层次: 网络接口层:负责接收和发送物理帧: 网络层

浅析Java网络编程之UDP传输(一)

网络传输方式一般有两种--TCP和UDP.本文用于简单了解一下UDP传输方式. 一.UDP有何特点? 1.面向无连接的: 2.面向报文的,且每一份报文不超过64KB: 3.不可靠但高效(不用建立连接): 4.支持一对一.一对多.多对一.多对多的交互通讯: 对于这些特点,没有什么为什么,事实而已啦! 二.在Java中怎么玩UDP? 在Java中,将建立UDP服务相关操作封装到了DatagramSocket类中,将数据报相关操作封装到了DatagramPacket类中. 三.具体玩的思路是什么? U