黑马程序员-java网络编程

来源:互联网 发布:长江大学有网络教育吗 编辑:程序博客网 时间:2024/06/06 00:34

----------- android培训java培训、java学习型技术博客、期待与您交流! ---------

所谓计算机网络就是指通过某种方式将多台计算机进行连接,实现了多台计算机之间互联以及数据交换。同一网络中的计算机若想实现彼此之间的通信,必须通过编写网络程序来实现。

通过计算机网络可以使多台计算机实现连接,但要进行连接和通信时,要遵守一定的规则。在计算机网络中,这些连接和通信的规则称为网络通信协议,它对数据的传输格式、传输速率、传输步骤等做了统一的规定,通信双方必须同时遵守才能完成数据交换。通信协议有很多种,最为广泛的是TCP/IP协议、IP协议、UDP协议。

1、IP地址和端口号

要想在计算机网络中实现计算机间的通信,必须为每一台计算机指定一个标识号,通过这个标识号来指定接收数据的计算机或者发送数据的计算机,在TCP/IP协议中,这种标识号被称网iIP地址,它可以唯一标识一台计算机。

IP分为IPv4和IPv6,IPv4由4个字节大小的二进制位表示,由于二进制形式表示的IP不方便表示,因此通常将IP地址写成十进制的形式表示,每一个字节用0-255表示。

IPv6中包含字母,数量很大,用16个字节来表示,可以满足不断增长的Ip需求。

通过IP地址可以连接到指定的计算机,但如果想要访问目标计算机中的某一个应用程序,还需要指定需要的端口号。在计算机中,不同的应用程序是通过端口号来区分的。

端口号是用两个字节(16位二进制位表示)表示的,它的取值范围是0-65535,其中0-1024为系统所保留,其他的为用户其他应用程序所使用。

本地回环地址(localhost):dos命令ping 127.0.0.1,可以用此地址来判断,显卡是否工作正常。

2、网络模型:两种OSI参考模型和TCP/IP参考模型。

OSI 主要包括:应用层、表示层、会话层、传输层、网络层、数据联络层、物理层七部分组成。

TCP/IP包括:  应用层                                、传输层、网络层、链路层四部分组成。


3、UDP和TCP协议的区别

UDP协议特点:(例子:对讲机)

a、不需要连接、将数据封装成多段数据包中。

b、每个数据包的大小不大于64KB。

c、因无需连接,所以是不可靠协议。

d、因为无需连接、所以效率和速度较快。

UDP应用领域:视频会议,电视转播等。

TCP协议特点:(例子:电话或手机)

a、需要建立连接,形成数据传输通道。

b、可以进行大数据量传输。

c、通过三次握手,形成可靠连接。

d、必须建立连接才能进行数据传输,所以效率较低。

TCP协议应用:下载文件。

三次握手的过程:第一次握手,客户端向服务器发出连接请求,等待服务器确认;第二次握手,服务器端向客户端送回一个响应,通知客户端收到了请求;第三次握手,客户端再次服务器端发送确认信息,确认连接。

三次握手,简化为:a、你在吗?b、在!c、我知道你在了。

4、InetAddress

InetAddress是用于封装IP地址相关的类,并提供了一系列方法,其中常用的有:
a、InetAddress getByName(String host);可以获取该类的实例对象。
b、InetAddress getLocalHost();可以获取该类的实例对象。
c、String getHostName();获取某个主机域名。
d、boolean isReachable(int timeout);判断指定的时间内地址是否可以到达。
e、String getHostAddress();获取某主机IP地址。
例如:

import java.net.*;//导包
public class IPDemo

{

/*注意到这些方法可能会抛出的异常。如果安全管理器不允许访问DNS服务器或禁止网络连接,SecurityException会抛出,如果找不到对应主机的IP地址,或者发生其他网络I/O错误,这些方法会抛出UnknowHostException。*/

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


{
InetAddress la=InetAddress.getLocalHost();//获得实例
InetAddress ra=InetAddress.getByName("www.baidu.com");//获得实例
System.out.println("主机地址为:"+la.getHostAddress());
System.out.println("主机名称为:"+la.getHostName());
System.out.println("目标机地址为:"+ra.getHostAddress());
System.out.println("目标机名字为:"+ra.getHostName());
System.out.println("3秒是否可以到达目标:"+ra.isReachable(3000));
System.out.println("3秒是否可以到达本机:"+la.isReachable(3000));
}

}

运行结果:



0 0