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地址。
- Java网络编程之基础
- java基础之 网络编程
- Java基础之网络编程
- JAVA基础之网络编程
- JAVA基础之网络编程
- java基础之网络编程
- java基础之-网络编程
- Java基础之网络编程
- java基础之 网络编程
- Java基础之网络编程
- java基础之网络编程 .
- Java基础之网络编程
- java基础之网络编程
- Java基础之网络编程
- java基础之网络编程
- java之网络编程基础
- java 基础之网络编程
- JAVA之网络编程基础
- GIT在线手册
- Mac 流氓软件统计
- 递归求解二叉树的深度
- 02 轻量级JavaEE相关技术
- 又是一个垃圾不开通博客
- java基础之-网络编程
- HDU 1171-Big Event in HDU(母函数)
- linux下对oracle备份
- 【坑】设置HTML表格中的单元格之间没有距离
- 尾递归, dfs递归问题非递归化
- 【Leetcode】Binary Tree Inorder Traversal (Tree Traversal)(转自Code_Ganker)
- mysql 字符集查看 设定
- KVC中一些好用的东西
- IPTABLES在线手册