一、基本概念
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)通过循环实现多次通讯;
客户端 客服端 结果
网友评论