Java Socket编程
网络编程中两个主要问题:
1.如何准确的定位网络上的一台或多台主机:IP
2.定位到主机之后,如果高效的传输数据:TCP
备注:TCP/IP协议中IP层主要负责网络主机的定位,而TCP层则提供面向应用可靠的tcp或非可靠的udp的数据传输机制。
两类传输协议:TCP、UDP
TCP:Transmission Control Protocol 传输控制协议(面向连接的保证可靠的传输协议)
UDP:User Datagram Protocol 用户数据报协议(是一种无连接的协议),每个数据报都是一个独立的信息,包括完整的源地址和目的地址。它在网络上以任何可能的路径传往目的地,因此能否到达目的地到达的时候以及内容的完整性都是无法保证的。
比较:
UDP:
1.每个数据报都给出了完整的地址信息,因此无需建立双方连接。
2.传输数据有大小限制,数据报限制在64kb之内
3.是不可靠的协议
TCP:
1.面向连接协议,传输数据之前必定要先建立连接
2.无传输数据大小限制
3.可靠的传输协议
备注:传输效率上UDP会更高些,比如音频或视频会议就会采用udp
备注:为了方便理解,可以把TCP传输理解为打电话,把UDP传输理解为发包裹寄信。
(1.打电话的时候如果对方没有反应你会开始说话吗,除非你神经病)
(2.你的快递难道没有丢失过吗?难道快递不可以绕地球一周再送到你面前吗,你还规定它线路不成)
基于Socket的Java网络编程
什么是Socket?
网络上的两个程序通过一个双向的通讯连接实现数据的交换,这个双向链路的一段称为一个Socket。一个Socket由一个IP地址和一个端口号唯一确定。
备注:IP确定主机,端口确定应用程序。
Socket通信过程:
1.创建Socket
2.打开获得Socket连接的输入/输出流
3.按照一定的协议对Socket进行读写操作
4.关闭流操作inputStream、outputStream.
5.关闭Socket
Java的Socket网络编程是涉及到很多方面的知识点的例如IO操作、集合操作、多线程操作所以再做网络编程的时候请确保你这几部分已经没问题了。
各层所使用的协议:
应用层:远程登入协议Telnet、文件传输协议ftp、超文本传输协议http、域名服务DNS、简单邮件传输协议SMTP、邮局协议POP3
传输层:传输控制协议TCP、用户数据报协议UDP
网络层:网际协议IP、互联网控制报文协议ICMP、Internet组管理协议ICMP
TCP/IP模型包括四层:(Internet通信工业标准)
1.应用层
2.传输层
3.网络层
4.网络接口层
URL:(Uniform Resource Locator)统一资源定位符
主要包含两部分(协议标识符、资源名字(主机名、文件名、端口号、、、))
https://www.oracle.com/java/index.html
InetAddress:此类表示互联网协议IP地址,此类没有直接的构造方法,都是通过它自己的静态方法来获得实例对象的。方法比较简单,看看API就行。
URL:此类代表一个统一资源定位符,它是指向互联网“资源”的指针。
常用的构造方法为 URL(String spec);
最重要的两个方法为
URLConnection openConnection();
InpputStream openStream();
URLConnection:抽象类URLConnection是所有类的超类,它代表应用程序和URL之间的通信链接。
获得URLConnection对象的方法可以通过其自身的构造方法也可以通过URL对象的openConnection方法获得
常用方法:
InputStream getInputStream();
OutputStream getOutputStream();
备注:URL中openStream()方法其实底层是先openConnection(),然后通过urlConnection对象getInputStream的。
Socket网络编程通信过程:(阻塞连接方式)
逻辑地址(IP),物理地址(Mac)。