网络基础知识
1、osi分层模型和tcp/ip分层模型的对应关系
这里对于7层模型不展开来讲,只选择跟这次系列主题相关的知识点介绍。
2、七层模型与协议的对应关系
网络层 ------------ ip(网络之间的互联协议)
传输层 ------------ tcp(传输控制协议)、udp(用户数据报协议)
应用层 ------------ telnet(internet远程登录服务的标准协议和主要方式)、ftp(文本传输协议)、http(超文本传送协议)
3、ip地址和端口号
1、ip地址用于唯一标示网络中的一个通信实体,这个通信实体可以是一台主机,可以是一台打印机,或者是路由器的某一个端口。而在基于ip协议网络中传输的数据包,必须使用ip 地址来进行标示。ip地址就像写一封信,必须指定收件人的地址一样。每个被传输的数据包中都包括了一个源ip和目标ip。
2、ip地址唯一标示了通信实体,但是一个通信实体可以有多个通信程序同时提供网络服务。这个时候就要通过端口来区分开具体的通信程序。一个通信实体上不能有两个通信程序 使用同一个端口号。
ip地址和端口号,就像一个出差去外地入住酒店一样,ip地址表示了酒店在具体位置,而端口号则表示了这个人在酒店的房间号。
4、tcp和udp
1、tcp是一种面向连接的保证可靠传输的协议。通过tcp协议传输,得到的是一个顺序的无差错的数据流。它能够提供两台计算机之间的可靠的数据流,http、ftp、telnet等应 用都需要这种可靠的通信通道。
2、udp是一种无连接的协议,每个数据报都是一个独立的信息,包括完整的源地址或目的地址,它在网络上以任何可能的路径传送目的地,至于能够达到目的地,达到目的地的时 间以及内容的正确性都是不能保证的。
既然有了保证可靠传输的tcp协议,为什么还要非可靠传输的udp协议呢?原因有两个:
1、可靠的传输是要付出代价的,对数据内容的正确性的检验必然会占用计算机处理时间和网络带宽。因此tcp的传输效率不如udp高。
2、许多应用中并不需要保证严格的传输可靠性,比如视频会议系统,并不要求视频音频数据绝对正确,只要能够连贯就可以了。所以在这些场景下,使用udp更合适些。
5、url访问网上资源
1、url对象代表统一资源定位器,是指向互联网“资源”的指针。它是用协议名、主机、端口和资源组成,即满足如下格式:
protocol://host:port/resourcename
http://www.crazyit.org/index.php
2、通过url对象的一些方法可以访问该url对应的资源:
string getfile():获取该url的资源名
string gethost():获取主机名
string getpath():获取路径部分
int getport():获取端口号
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
public static void main(string[] args) throws ioexception { url url = new url( "https://i.cnblogs.com/editposts.aspx?opt=1" ); string file = url.getfile(); system.out.println(file); string host = url.gethost(); system.out.println(host); int port = url.getport(); system.out.println(port); string query = url.getquery(); system.out.println(query); string protocol = url.getprotocol(); system.out.println(protocol); } |
执行结果:
1
2
3
4
5
|
1 /editposts.aspx?opt= 1 2 i.cnblogs.com 3 - 1 4 opt= 1 5 https |
上面展示了url对象的常用方法,下面来看看url最重要的两个方法:openconnection()、openstream()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
public static void main(string[] args) throws ioexception { url url = new url( "http://www.baidu.com" ); urlconnection connection = url.openconnection(); inputstream is = connection.getinputstream(); outputstream os = new fileoutputstream( "c:/data.txt" ); byte [] buffer = new byte [ 1024 ]; int flag = 0 ; while (- 1 != (flag = is.read(buffer, 0 , buffer.length))) { os.write(buffer, 0 , flag); } os.close(); is.close(); } |
执行结果:
1、代码第4行openconnection()该方法用于返回urlconnection对象,表示到url所引用的远程连接。
2、代码第5行getinputstream方法,用于返回从此打开的连接读取的输入流。
3、后面的代码就是我们已经很熟悉的从输入流中读到数据,再通过输出流写入文件。
4、执行的结果就是我们通过浏览器访问http://www.baidu.com,百度服务器返回的内容。
5、这里是文本文件,我们将后缀修改为html,然后用浏览器访问,这样看起来更直观:
6、inetaddress
java提供了inetaddress类来代表ip地址。
1
2
3
4
5
6
7
8
|
public static void main(string[] args) throws ioexception { inetaddress address = inetaddress.getlocalhost(); system.out.println(address); address = inetaddress.getbyname( "www.baidu.com" ); system.out.println(address); } |
执行结果:
1
2
|
windows-ec813qq/ 192.168 . 88.1 www.baidu.com/ 115.239 . 211.112 |
总结
以上就是本文关于java网络编程基础知识介绍的全部内容,希望对大家有所帮助。有什么问题可以随时留言,小编会及时回复大家的,感谢朋友们对本站的支持!
原文链接:http://www.cnblogs.com/dongguacai/p/5747397.html