黑马程序员——java基础---网络编程

------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------

网络编程

一、概述

1、网络模型

1、OSI参考模型

2、TCP/IP参考模型

网络模型的七层概述:

物理层:主要定义物理设备标准,如网线的接口类型、光纤的接口类型、各种传输介质的传输速率等。它的主要作用是传输比特流(就是由1、0转化为电流强弱来进行传输,到达目的地后在转化为1、0,也就是我们常说的数模转换与模数转换)。这一层的数据叫做比特。

数据链路层:主要将从物理层接收的数据进行MAC地址(网卡的地址)的封装与解封装。常把这一层的数据叫做帧。在这一层工作的设备是交换机,数据通过交换机来传输。

网络层:主要将从下层接收到的数据进行IP地址(例192.168.0.1)的封装与解封装。在这一层工作的设备是路由器,常把这一层的数据叫做数据包。

传输层:定义了一些传输数据的协议和端口号(WWW端口80等),如:TCP(传输控制协议,传输效率低,可靠性强,用于传输可靠性要求高,数据量大的数据),UDP(用户数据报协议,与TCP特性恰恰相反,用于传输可靠性要求不高,数据量小的数据,如QQ聊天数据就是通过这种方式传输的)。主要是将从下层接收的数据进行分段和传输,到达目的地址后再进行重组。常常把这一层数据叫做段。

会话层:通过传输层(端口号:传输端口与接收端口)建立数据传输的通路。主要在你的系统之间发起会话或者接受会话请求(设备之间需要互相认识可以是IP也可以是MAC或者是主机名)。

表示层:主要是进行对接收的数据进行解释、加密与解密、压缩与解压缩等(也就是把计算机能够识别的东西转换成人能够能识别的东西(如图片、声音等)。

应用层: 主要是一些终端的应用,比如说FTP(各种文件下载),WEB(IE浏览),QQ之类的(可以把它理解成我们在电脑屏幕上可以看到的东西.就是终端应用)。

一般来说开发处于传输层和网际层,应用层为:FTP和HTTP协议等,传输层为:UDP和TCP等,网际层为:IP。

通常用户操作的是应用层,而编程人员需要做的是传输层和网际层,用户在应用层操作的数据,经过逐层封包,最后到物理层发送到另一个模型中,再进行逐层解包。

图示为:


2、网络通讯要素

1、IP地址。IP就是电脑的地址,

2、端口号。端口号用于标识进程的逻辑地址,不同进程的标识;端口号其实就是应用程序的地址

3、传输协议

特殊IP :

172.0.0.1 本地回环地址。

172.192.1.255  代表这个网路段中的广播地址

172.192.1.0     代表一个网络地址

一般情况下的端口:范围0——65535任选,但是0——1024被系统的程序所保留

常见的端口:web服务端口80;数据库端口3306

常见的协议:UDP协议,TCP协议

IP地址:InetAddress网络中设备的标识

3、InetAddress类

3.1、InetAddress类无构造函数;存在于java.net包。

3.2、常用方法

static InetAddressgetLocalHost()  返回本地主机的名称和IP地址

static InetAddressgetByName(String host)   获取给定主机的IP地址

static InetAddressgetAllByName(String host)   获取给定主机的所有IP地址

StringgetHostAddress() 返回 IP 地址字符串(以文本表现形式)。

String getHostName()    获取此 IP 地址的主机名。

3.3、常见异常

SocketException                      BindException

SecurityException                    UnknownHostException

IOException

3.4、如何获取任意一台主机的IP地址对象:

                1)功能:返回InetAddress对象

                2)对于任意主机,需要指定传入主机名的参数

注意:如果IP地址和对应的主机名,这种映射关系没有在网络上,就不会解析成功,返回的还是指定的IP。

4、传输协议UDP和TCP

4.1、UDP

UDP是面向无连接,明确了对方的端口,无论对方在不在网上,只管传输,不在就会丢失数据。只求速度,应用于网络视频会议和聊天等应用程序中。

  特点:

1、每个数据包的大小在限制在64k内。

2、因为无连接,所以是不可靠协议。

3、因为不需要建立连接,所以速度快。

4.2、TCP

TCP是面向连接的,必须连接成功才能传输数据,一般应用于下载等程序上。

特点:

1、通过三次握手完成连接,是可靠协议

2、在连接中进行大数据量传输

3、必须建立连接,效率会稍低

注:三次握手:第一次本方发送请求,第二次对方确认连接,第三次本方再次确认连接成功。

二、传输协议

1、Socket

1、Socket被称之为插座,是网络服务提供的一种机制。

2、通信两端都要有Socket,才能建立服务。

3、网络通信其实就是Socket间的通信。数据在两个Socket间通过IO传输。

2、UDP具体应用

2.1、DatagramSocket类常用方法

构造函数:

DatagramSocket()

DatagramSocket(int port)

方法:    

DatagramSocket  send(DatagramPacket e);

DatagramSocket  receive(DatagramPacket e); 阻塞式方法

Void  close()

2.2、DatagramPacket类常用方法

构造函数:

DatagramPacket(byte[] buf,int length,InetAddress address, int port)

DatagramPacket(byte[] buf,int length)

方法:    

int getLength(); 返回将要发送或接收到的数据的长度

byte[] getData();  返回数据缓冲区

2.3、发送步骤

1,建立updsocket服务。

2,提供数据,并将数据封装到数据包中。

3,通过socket服务的发送功能,将数据包发出去。

4,关闭资源。

代码示例:


2.4、接收步骤

1,定义udpsocket服务。通常会监听一个端口。其实就是给这个接收网络应用程序定义数字标识。方便于明确哪些数据过来该应用程序可以处理。

2,定义一个数据包,因为要存储接收到的字节数据。因为数据包对象中有更多功能可以提取字节数据中的不同数据信息。

3,通过socket服务的receive方法将收到的数据存入已定义好的数据包中。

4,通过数据包对象的特有功能。将这些不同的数据取出。打印在控制台上。

5,关闭资源。

代码示例:            


UDP小练习

1、在发送端通过键盘写入数据,然后在接收端显示出来



2、编写一个聊天程序

代码示例:




3、TCP具体应用

3.1、客户端常用方法(Socket类)

构造函数:

Socket(String host,int port) 创建流套接字并连接到指定主机上的指定端口号。

常用方法:

voidclose()  关闭此套接字。

InetAddress  getInetAddress()返回套接字连接的地址。

InputStream  getInputStream()返回此套接字的输入流。

OutputStream  getOutputStream()返回此套接字的输出流。

voidshutdownInput()  此套接字的输入流置于“流的末尾”。

void shutdownOutput()禁用此套接字的输出流。

3.2、服务端常用方法(ServerSocket类)

构造函数:

ServerSocket(int port) 创建绑定到特定端口的服务器套接字。

常用方法:

Socketaccept()侦听并接受到此套接字的连接。

voidclose() 关闭此套接字。

InetAddressgetInetAddress()返回此服务器套接字的本地地址。

3.3、客户端具体步骤

1,建立socket服务。指定要连接主机和端口。

2,获取socket流中的输出流。将数据写到该流中。通过网络发送给服务端。

3,获取socket流中的输入流,将服务端反馈的数据获取到,并打印。

4,关闭客户端资源。

代码示例:


3.4、服务端具体步骤

1,建立服务端的socket服务。ServerSocket();  并监听一个端口。

2,获取连接过来的客户端对象。 通过ServerSokcet的 accept方法。没有连接就会等,所以这个方法阻塞式的。

3,客户端如果发过来数据,那么服务端要使用对应的客户端对象,并获取到该客户端对象的读取流来读取发过来的数据。 并打印在控制台。

4,关闭服务端。(可选)

代码示例:


TCP练习

1、需求:建立一个文本转换服务器。客户端给服务端发送文本,服务端会将文本转成大写再返回给客户端。而且客户端可以不断的进行文本转换。当客户端输入over时,转换结束。




2、复制文件,通过客户端将目标文件传到服务端;




3、上传文件,通过客户端将目标图片传到服务端;



4、多客户并发上传文件,通过客户端将目标图片传到服务端;




5、多客户并发登陆





------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值