美文网首页
Java学习day-21:网络编程

Java学习day-21:网络编程

作者: 开源oo柒 | 来源:发表于2019-08-06 23:41 被阅读0次

一、基本概念

1.网络的概念:

(1)网络:

一组互相连接的计算机,多台计算机组成,使用物理线路进行连接。

(2)网络组成:

1) 计算机硬件:计算机、外部设备、通信线路。

2)计算机软件:网络操作系统、网络处理软件、网络通讯协议。

2.网络编程的三要素:

(1)IP地址:唯一标识网络上的每一台计算机,两台计算机之间通信的必备要素。

(2)端口号:计算机中应用的标号(代表一个应用程序),0-1024 系统使用或保留端口 ,端号口占 2 个字节,所以有效端口 0-65535。

(3)通讯协议::通信的规则 TCP,UDP。

(4)Socket含义:

Socket 称为“套接字”,是计算机之间通信的一种约定或一种方式,通过 Socket 这种约定,一台计算机可以接收其他计算机的数据,也可以向其他计算机发送数据。

3.网络通信协议:

       通过计算机网络可以实现不同计算机之间的连接与通信,但是计算机网络中实现通信必须有一些约定即通信协议,对速率、传输代码、代码结构、传输控制步骤、出错控制等制定标准。

1)网络通信协议的基本框架OSI:

OSI模型制定的七层标准模型,分别是:应用层,表示层,会话层,传输层,网络层,数据链路层,物理层。

2)网络协议的分层:

 把用户应用程序作为最高层,把物理通信线路作为最低层,将其间的协议处理分为若干层,规定每层处理的任务,也规定每层的接口标准。

OSI模型与TCP/IP模型的对应关系

二、 TCP协议和UDP协议的区别

1. TCP协议

 TCP(Transfer Control Protocol)是面向连接的,所谓面向连接,就是当计算机双方通信时必需经过先建立连接,然后传送数据,最后拆除连接三个过程。

(1)TCP通信原理:

服务器创建 ServerSocket,在指定端口监听并处理请求;

客户端创建 Socket,向服务器发送请求;

(2)TCP建立连接的步骤:

1)是请求端(客户端)发送一个包含SYN即同步(Synchronize)标志的TCP报文,SYN同步报文会指明客户端使用的端口以及TCP连接的初始序号。

2)服务器在收到客户端的SYN报文后,将返回一个SYN+ACK的报文,表示客户端的请求被接受,同时TCP序号被加一,ACK即确认(Acknowledgement)。

3)客户端也返回一个确认报文ACK给服务器端,同样TCP序列号被加一,到此一个TCP连接完成。然后才开始通信的第二步:数据处理。

2. UDP协议:

(1)UDP数据传输的细节:

1) 不需要利用 IO 流实现数据的传输。

2) 每个数据发送单元被统一封装成数据包的方式,发送方将数据包发送到网络中,数据包在网络中去寻找他的目的地。

3) DatagramSocket:用于发送或接收数据包。

4) DatagramPacket:数据包。

3.TCP协议和UDP协议的区别

1)TCP(transfer control protocol):

一种面向连接(连接导向)的、可靠的、基于字节流的运输层(Transport layer)通信协议 。

三次握手

特点:

1)面向连接;

2)点到点的通信;

3)高可靠性:三次握手;

4)占用系统资源多、效率低。

(2)UDP(User DatagramProtocol ):

一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务。

特点:

1)非面向连接,传输不可靠,可能丢失。

2)发送不管对方是否准备好,接收方收到也不确认。

3)数据报的大小限制在64K内。

4)非常简单的协议,开销小。

区别:

三、InetAddress、InetSocketAddress、URL类

1.InetAddress类:

封装计算机的IP地址,不包含端口号;没有构造方法;只能通过静态方法得到对象。

常用方法:

1)String getHostAddress():获得IP地址;

2)String getHostName():获得主机名;

3)static InetAddress getByName(String host):根据主机名获得IP地址;

代码截图 结果

2.InetSockAddress类:

包含IP和端口信息,常用于Socket通信。此类实现 IP 套接字地址(IP 地址 + 端口号),不依赖任何协议。

常用方法:

1)InetAddress getAddress():获取InetAddress对象;

2)int getPort():获取端口号;

3)String getHostName():获取主机名;

代码截图 结果

3.URL类:

统一资源定位符,由 4 部分组成:协议 、存放资源的主机域名、端口号和资源文件名。它是指向互联网“资源”的指针。资源可以是简单的文件或目录,也可以是对更为复杂的对象的引用,例如对数据库或搜索引擎的查询。

常用方法:

1)String getProtocal():获取次URL的协议名称;

2)String getHost():获取此URL主机名;

3)int getPort():获取URL 的端口号;

4)String getFile():获取此 URL 的文件名;

5) getDefaultPort():获取与此 URL 关联协议的默认端口号;

6) getPath():获取此 URL 的路径部分;

实现简单网络爬虫:

代码截图 结果

四、基于TCD协议的 Socket编程

1.实现单次请求与响应:

(1)客户端:

1)建立连接;

2)打开Socket关联的输入出流;

3)数据流中读写信息;

4)依次关闭数据流和Socket;

(2)服务端:

1)建立连接,处理发送到指定端口的数据;

2)监听并获取客户端对象;

3)数据流中读写信息;

4)依次关闭数据流和Socket;

原理图 代码截图 代码截图 结果

2.实现双向通信:

请求-响应:

1)Socket类:发送TCP消息;

2)ServerSocket类:创建服务器;

3)运行时,要先启动服务器端,再启动客户端,才能得到正常的运行效果。

(1)实现用户登录的功能:

使用循环;实现序列化接口Serializable;

客户端:

1)向服务端发送用户对象(账户密码);

2)接收服务端验证结果;

服务端:

1)接收客户端对象;

2)验证信息是否正确并发回结果;

原理图 服务端 客户端 User类 客户端 服务端

3.使用多线程实现多用户登录:

服务端 客户端 多线程实现 User类 结果 结果 结果 结果

4.实现聊天室多次聊天功能:

(1)多次聊天使用循环解决。

单个客户端和服务器多次通信 客户端 服务端 结果 结果

五、UDP通讯的实现

1.DatagramSocket:

用于发送或接收数据报包;

构造方法:

1) DatagramSocket() :构造数据报套接字并将其绑定到本地主机上任何可用的端口;

2) DatagramSocket(int port) :创建数据报套接字并将其绑定到本地主机上的指定端口。

常用方法:

1)send(DatagramPacket p) :从此套接字发送数据报包。

2) receive(DatagramPacket p) :从此套接字接收数据报包;

3)close() :关闭此数据报套接字。

4)getPort() :返回此套接字连接到的端口号。

2.DatagramPacket:

数据容器(封包)的作用。

常用方法:

1) DatagramPacket(byte[] buf, int length) :构造数据报包,用来接收长度为 length 的数据包。

2)DatagramPacket(byte[] buf, int length, InetAddress address, int port) :构造数据报包,用来将长度为 length 的包发送到指定主机上的指定端口号。

3)getAddress() :获取发送或接收方计算机的IP地址,此数据报将要发往该机器或者是从该机器接收到的。

代码截图 结果 结果

3.UDP通信编程的步骤:

1)创建客户端的DatagramSocket,创建时,定义客户端的监听端口。

2)创建服务器端的DatagramSocket,创建时,定义服务器端的监听端口。

3)在服务器端定义DatagramPacket对象,封装待发送的数据包。

4)客户端将数据报包发送出去。

5)客户端将数据报包发送出去。

注意:

1)UDP通信 不需要利用 IO 流实现数据的传输;

2)每个数据发送单元被统一封装成数据包的方式,发送方将数据包发送到网络中,数据包在网络中去寻找他的目的地。

(1)通过循环实现多次通讯;

客户端 客服端 结果

相关文章

  • Java学习day-21:网络编程

    一、基本概念 1.网络的概念: (1)网络: 一组互相连接的计算机,多台计算机组成,使用物理线路进行连接。 (2)...

  • 《Netty实战》读书笔记01——第一章

    第 1 章 笔记 Java 网络编程 早期Java的网络编程,需要学习很多C语言套接字(Socket)的知识,但...

  • socket通讯编程

    这一块属于网络编程,主要是学习TCP/IP四层的网络体系结构,学习TCP编程和UDP编程。 java.net中 一...

  • Java网络编程(第四版) PDF 超清版

    《Java网络编程(第四版)》是一本关于Java编程相关的电子书资源,介绍了关于Java、网络编程、Java编程方...

  • 学习java网络编程

    InetAddress类 多线程服务器 服务器端 服务器端线程 客户端 客户端线程 运行结果 基于socket公共...

  • 4月5日TestServerSocket

    于2017/4/5复习学习的java - Socket网络编程. 本次完成的是网络聊天编程功能(没有GUI).我想...

  • Android应用开发:网络编程2

    网络编程 Java基础:网络编程 Uri、URL、UriMatcher、ContentUris详解 Android...

  • Http协议

    网络编程 Java基础:网络编程 Uri、URL、UriMatcher、ContentUris详解 Android...

  • Java网络编程模型(一)

    本系列主要介绍java网络编程的模型,沿着模型的进化线结合案例分析学习。本文主要介绍基于OIO的网络编程模型。 基...

  • Java开发学习之路

    Java开发的学习之路 基础知识 编程语言:Java Python C 基本算法 基本网络知识:TCP/IP HT...

网友评论

      本文标题:Java学习day-21:网络编程

      本文链接:https://www.haomeiwen.com/subject/jsovdctx.html