网络编程的综述
网络编程从大的方面说就是对信息的发送到接收,中间传输为物理线路的作用。最主要的工作就是在发送端把信息通过规定好的协议进行组装包,在接收端按照规定好的协议把包进行解析,从而提取出对应的信息,达到通信的目的。
这里有相关模型的参考资料(详解)
网络模型:描述网络的结构原理和工作原理
- OSI参考模型:七层:应用层,表示层,会话层,传输层,网络层,数据链路层,物理层
- Internet网络模型:四层
- 网络协议:指定层上进行数据交换的规则
- Internet的网络层协议:IP协议;DNS协议(辅助协议)
- Internet的传输层协议:TCP协议;UDP协议
TCP和UDP
TCP (Transmission Control Protocol)和UDP(User Datagram Protocol)协议属于传输层协议。其中TCP提供IP环境下的数据可靠传输,它提供的服务包括数据流传送、可靠性、有效流控、全双工操作和多路复用。通过面向连接、端到端和可靠的数据包发送。通俗说,它是事先为所发送的数据开辟出连接好的通道,然后再进行数据发送;而UDP则不为IP提供可靠性、流控或差错恢复功能。一般来说,TCP对应的是可靠性要求高的应用,而UDP对应的则是可靠性要求低、传输经济的应用。TCP支持的应用协议主要有:Telnet、FTP、SMTP等;UDP支持的应用层协议主要有:NFS(网络文件系统)、SNMP(简单网络管理协议)、DNS(主域名称系统)、TFTP(通用文件传输协议)等。
TCP协议和UDP协议各有所长、各有所短,适用于不同要求的通信环境。TCP协议和UDP协议之间的差别如附表所示。
TCP(Transmission Control Protocol,传输控制协议)是面向连接的协议,也就是说,在收发数据前,必须和对方建立可靠的连接。一个TCP连接必须要经过三次“对话”才能建立起来,其中的过程非常复杂,只简单的描述下这三次对话的简单过程:主机A向主机B发出连接请求数据包:“我想给你发数据,可以吗?”,这是第一次对话;主机B向主机A发送同意连接和要求同步(同步就是两台主机一个在发送,一个在接收,协调工作)的数据包:“可以,你什么时候发?”,这是第二次对话;主机A再发出一个数据包确认主机B的要求同步:“我现在就发,你接着吧!”,这是第三次对话。三次“对话”的目的是使数据包的发送和接收同步,经过三次“对话”之后,主机A才向主机B正式发送数据。
UDP(User Data Protocol,用户数据报协议)是与TCP相对应的协议。它是面向非连接的协议,它不与对方建立连接,而是直接就把数据包发送过去!也就是类似于发短信,不管对方能不能收到,反正都要发出去。
- 一、网络:将不同的区域的计算机连接到一起 由小到大 局域网-城域网-互联网
- 二、地址:IP地址 确定网络上的一个位置–>房子的地址
- 三、端口号:计算机上有很多程序,程序之间也需要交互,比如说:QQ和腾讯公司的服务器之间需要进行对接,
- 所以需要端口号,用于区分计算机上的软件的–>房子的中各房间的房门
- 长度为0-65535,在用一个协议(同UDP或者TCP)下,端口号不能重复,建议1024以下端口不用,一般用于知名厂商:80–http;21–ftp
- 四、资源定位:资源如何从服务器中传入软件中,这就需要资源的定位。URL–统一资源定位符 URI–统一资源
- 五、数据的传输:协议:TCP:类似于三次握手,面向连接,点到点的通信,安全可靠,相率相对低下,就是打电话,你说一句,我说一句
- UDP:类似于发短信,非面向连接,数据可能丢失,不可靠,但是效率高
- 传输:先封装;传输到目的地后,再拆分数据
表示地址的类
表示地址的类有InetAddress(表示互联网协议 (IP) 地址)和InetSocketAddress(此类实现 IP 套接字地址((IP 地址 + 端口号)),主机名到 IP 地址的解析 通过使用本地机器配置信息和网络命名服务(如域名系统(Domain Name System,DNS)和网络信息服务(Network Information Service,NIS))来实现。要使用的特定命名服务默认情况下是本地机器配置的那个。对于任何主机名称,都返回其相应的 IP 地址。
import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.net.UnknownHostException;
/**
* 一、网络:将不同的区域的计算机连接到一起 由小到大 局域网-城域网-互联网
* 二、地址:IP地址 确定网络上的一个位置-->房子的地址
* 三、端口号:计算机上有很多程序,程序之间也需要交互,比如说:QQ和腾讯公司的服务器之间需要进行对接,
* 所以需要端口号,用于区分计算机上的软件的-->房子的中各房间的房门
* 长度为0-65535,在用一个协议(同UDP或者TCP)下,端口号不能重复,建议1024以下端口不用,一般用于知名厂商:80--http;21--ftp
* 四、资源定位:资源如何从服务器中传入软件中,这就需要资源的定位。URL--统一资源定位符 URI--统一资源
* 五、数据的传输:协议:TCP:类似于三次握手,面向连接,点到点的通信,安全可靠,相率相对低下,就是打电话,你说一句,我说一句
* UDP:类似于发短信,非面向连接,数据可能丢失,不可靠,但是效率高
* 传输:先封装;传输到目的地后,再拆分数据
* @author Administrator
*
*/
public class Demo01 {
public static void main(String[] args) {
testInetSocketAddress();
}
public static void testInetSocketAddress(){
/* 在InetAddress(地址+主机名字)上加上端口号
创建对象: InetSocketAddress(String hostname, int port)
InetSocketAddress(InetAddress addr, int port)
*/
// InetSocketAddress add = new InetSocketAddress("192.168.1.101",9999);
InetSocketAddress add = new InetSocketAddress("192.168.1.104",3999);//"127.0.0.1"代表本机
System.out.println(add.getHostName());//返回本机名
System.out.println(add.getPort());
InetAddress addr = add.getAddress();
System.out.println(addr.getHostAddress());//返回地址
System.out.println(addr.getHostName());//返回计算机名
}
public static void testInetAddress() throws UnknownHostException{
//使用getLocalHost方法创建InetAddress对象
InetAddress add = InetAddress.getLocalHost(); //返回本地主机
System.out.println(add.getHostName()); //返回IP地址的主机名
System.out.println(add.getHostAddress()); //返回IP地址的字符串名
//使用域名得到InetAddress对象
InetAddress add1 = InetAddress.getByName("www.baidu.com"); //在给定主机名的情况下确定主机的 IP 地址
System.out.println(add1.getHostName()); //返回IP地址的主机名
System.out.println(add1.getHostAddress()); //返回IP地址的字符串名
//使用IP得到InetAddress对象
InetAddress add2 = InetAddress.getByName("192.168.1.104"); //在给定原始IP=地址的情况下,返回InetAddress对象
System.out.println(add2.getHostName()); //返回IP地址的主机名
//输出ip而不是域名。如果这个ip地址不存在或DNS服务器不允许进行ip地址和域名的映射,
//getHostName方法就直接返回这个ip地址
System.out.println(add2.getHostAddress()); //返回IP地址的字符串名
}
}