java基础之-网络编程

来源:互联网 发布:空间权重矩阵 编辑:程序博客网 时间:2024/05/16 12:06

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

1,实现网络之间的通信,要具备三个要素,IP地址,端口,和通讯协议。

首先什么是IP地址:它是为主机编地址的方式。IP地址是32位的二进制数。它被分隔成4部分,每部分八个二进制位,中间用,隔开,因此每段最大为255。

常见的IP地址有IPV4和IPV6.。IPV4为32位,分4段,每段最大值为255,但是随着互联网的发展,IP地址需求过大,因此产生了IPV6它是采用128位的地址长度。解决了IP地址不够用的问题。

逻辑端口:同于标志进程的逻辑地址不同的进程有不同的地址,范围0-65535 ,0-1024一般用于系统或作为保留端口。

同时我们也必须拥有一样的协议,国际组织定义了TCP/IP协议,这个协议大部分操作系统都具备,因此我们可以实现跟所有觉又此协议的计算机实现通信。常见的协议有TCP ,UDP

2,InetAddress此类表示互联网协议地址。此类提供将主机名解析为其IP地址或同过IP地址解析主机名的方法。

此类没有构造方法,因此要通过它的静态方法获取对象。例如:

或者通过getByName(String host)通过主机名获取IP对象的方法,可以获取任何知道主机名的IP地址。

UDP传输的特点:首先将数据,本地地址,目的地封装在数据包中,每个包的大小在64K内,不需要建立连接因此是不安全的,但是速度快。

TCP传输的特点:首先需要建立连接,形成传输数据通道,可以在连接后进行大量数据传输,因为要进行三次握手确认连接,因此是安全的。速度慢

下面用UDP写个程序从键盘读取数据,当为over时发送端将over发送后关闭,接收端接收到over后结束。

发送端:

接收端:

TPC传输:分为客户端和服务端

客户端:

Socket 构造函数Socket()通过系统默认类型的 SocketImpl 创建未连接套接字Socket(InetAddress address, int port)制定IP地址和端口号

Socket(String host, int port)指定主机和端口号。

Socket()创建未连接套接字子这个构造方法要和connect(SocketAddress endpoint)或者connect(SocketAddress endpoint, int timeout)方法使用,

其中timeout为指定的链接超时的时间。以毫秒计算。

其中参数endpoint为SocketAddress对象,这是个抽象类,那么我们找到其子类InetSocketAddress它的构造函数有三种:

InetSocketAddress(InetAddress addr, int port) 可以封装IP地址和端口号。InetSocketAddress(int port)封装端口号

 InetSocketAddress(String hostname, int port)封装了主机和端口号,

下面写个例子:如果利用InetSocketAddress创建socket服务

InetSocketAddress isa=new InetSocketAddress("IP",9999);

Socket s=new Socket();

s.connect(isa);

由此Socket服务创建成功。

在每个客户端中都封装了自己的流,输入输出流通过getInputStream()和getOutputStream()方法获取,将输入发送出去或者读取出来。

客户端:
ServerSocket 构造函数ServerSocket() 创建非绑定服务器套接字ServerSocket(int port) 创建Serversocket服务并监听一个端口
ServerSocket(int port, int backlog)这个构造函数中要求指定监听的端口,并且要求指定一个最大的链接数,超出这个链接数时则客户端不会链接进来。

同样如果使用ServerSocet()函数,这个函数并没有绑定任何服务。那么必须使用bind(SocketAddress endpoint)或bind(SocketAddress endpoint, int backlog)

这两个方法同样要求传入一个封装了端口号的InetSocketAddress对象,后者还要求指定接受客户端的最大值。

在服务端有个accept()方法来接受客户端对象。这个方法是阻塞式的,当没有客户端链接时就会阻塞。

当需要多个客户端登陆服务器时,要使用多线程技术,每当接受一个客户端,服务端就会为这个客户端专门创建一个线程,用来响应客户端的请求。

http消息头:分为发送到服务端的请求消息头和接收到服务器返回的相应消息头;


次为http请求消息头主要包括:请求方式为get方式,http协议版本为1.1。本机可解析资源的应用,客户端支持的语言,解析数据包的方法,以及客户端的发送的服务器的IP地址和端口号,连接类型等


此为http响应消息头,主要返回的信息包括:服务端支持的协议版本,最后修改的时间,请求数据的类型,大小为多少。连接的状态等。

URL类 它 代表一个统一资源定位符,它是指向互联网“资源”的指针。由协议,主机名,端口号,资源名称组成。

它的构造函数URL(String spec)它可以根据String 表示形式创建URL对象,通过URL的方法分别获取协议名称,主机名,端口,路径,文件名,和参数等

当获取端口号时,如果没有指定端口号,那么getPort()方法会返回-1那么在判断时如果返回-1就指定返回80端口号。因为HTTP协议的默认端口号就是80

URL类有个方法openConnnection()方法会返回一个URLConnnection对象,这个对象将socket对象封装在内部,并且将http协议也封装在内部。

当我们利用socket编程时接受数据会读取到http消息头,当我们使用URLConnection对象时,这时我们在应用层,它通过拆包的形式,将服务器发来的信息,解析,只显示资源。

关于域名解析:当我们在浏览器输入域名后,首先走本地hosts文件,在这个文件中查看是否有对象的IP地址,如果有则向这个地址发送请求,如果没有则通过网络向DNS发送请求查看是否有对应的IP地址,如果有对应的IP地址那么链接过去。明白了原理,那么我们在遇到恶意网站时,可以改变hosts文件,将它的域名改到本机IP地址。






0 0