------<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>、期待与您交流! -------

黑马程序员——java基础---网络编程相关推荐

  1. 黑马程序员——Java基础——网络编程1

    ------- android培训.java培训.期待与您交流! ---------- 网络编程1 一.获取IP     网络编程主要在传输层 :TCP(Transmission Control Pr ...

  2. 黑马 程序员——Java基础---流程控制

    黑马程序员--Java基础---流程控制 ------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------ 一.概述 Java提供了两种基本的流程控制结构:分支结构 ...

  3. 黑马 程序员——Java基础---IO(下)

    黑马程序员--Java基础---IO(下) ------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------ 一.概述 Java除了基本的字节流.字符流之外,还提供 ...

  4. 黑马程序员——Java基础:网络编程

    ---android培训.java培训.期待与您交流!  ----   一.网络编程 网络编程:在java.net包中. 网络通信: 1.首先要找到对方的IP. 2.数据要发送到对方指定的应用程序上, ...

  5. 黑马程序员--Java基础加强篇

    开发工具使用 --------------------------------------------------------------------------------------------- ...

  6. 黑马程序员-Java基础:面向对象(上)

    ------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 一.面向对象概述 当需求单一,或者简单时,我们一步一步去操作没问题,并且效率也挺高.可随着需求的 ...

  7. 黑马程序员-Java基础:设计模式总结

    --Java培训.Android培训.iOS培训..Net培训.期待与您交流! -- Java基础部分设计模式 一.设计模式概述 设计模式(Design pattern)是一套被反复使用.多数人知晓的 ...

  8. 黑马程序员-Java基础知识预备之Java流程控制与数组

    -------- android培训.java培训.期待与您交流!---------- 本博文涉及的主要内容如下: if语句 switch语句 循环结构 循环结构的控制 数组类型 数组在内存中的运行机 ...

  9. 黑马程序员—java基础总结1

    ------- android培训.java培训.期待与您交流! ---------- 一:java概述: 1991 年Sun公司的James Gosling等人开始开发名称为 Oak 的语言,希望用 ...

最新文章

  1. php中介模式,中介者模式(Mediator pattern)详解及PHP实现
  2. Golang sync.Map原理
  3. 【重温基础】7.时间对象
  4. python基础——if语句/条件控制
  5. winform实现Echart统计图(基于webBrowser)
  6. 海华模组:WIFI、BT、SoC模组列表
  7. python画树干_python教你画一棵树
  8. R语言信用评分卡:探索性数据分析
  9. java的map的方法_Java中Map集合(接口)的基本方法程序演示
  10. 一种单片机支持WiFi的应用——SimpleWiFi在单片机中的应用
  11. Windows Server AppFabric分布式缓存研究
  12. oracle ebs fsg报表,Oracle EBS FSG报表迁移
  13. 二叉树遍历的超简单方法(详细、简单)
  14. python天勤金叉编程代码大全_这些Python编程黑科技,装逼指南,高逼格代码,让你惊叹不已...
  15. 临床试验中edc录入_基于EDC的临床试验数据质量控制
  16. 锐捷交换机配置MSTP以及VRRP
  17. Joshua Loth Liebman
  18. PLC机器人控制器编程笔记
  19. kali------kali更新源
  20. HyperSnap基本用法

热门文章

  1. 单纯形法剖析,一句话描述单纯形法
  2. nn,cnn(lenet5),c++代码
  3. 字库点阵数据的竖置横排和横置横排区别
  4. 算法设计与分析课程复习笔记11——单源最短路径
  5. Unity后处理效果之边角压暗
  6. Zynq linux启动过程,详解zynq的启动步骤
  7. fmc接口定义_FMC接口说明
  8. Android9.0 完全隐藏导航栏、状态栏
  9. 拨打电话(三种方式)
  10. JavaSE - 14 枚举 + 注解