基于TCP/UDP的Socket编程,HTTP/HTTPS协议

TCP :传输控制协议(TCP),是互联网协议组的主要协议之一。它起源于最初的网络实施,在网络实施中,它补充了互联网协议。java

UDP: 用户数据报协议(User Datagram Protocol)是一种无链接的传输层协议,提供面向事务的简单不可靠信息传送服务,能够保证通信效率,传输延时小。编程

Socket:Socket编程用于解决咱们客户端与服务端之间通讯的问题。数组


TCP:

服务端(server):安全

1)建立ServerSocket实例,指定本地的端口,用于监听其链接请求。服务器

2)调用socket的accept()方法得到客户端的链接请求,经过accept()方法返回的socket实例,创建与客户端的链接。网络

3)经过返回的Socket实例来得到InputStream和OutputStream,进行数据的写入和读出。负载均衡

4)数据传输结束,调用 socket 实例的 close() 方法关闭链接 。socket

客户端(client):函数

1)建立Socket实例,经过指定的服务器地址和端口创建链接。post

2)经过Socket实例获取InputStream和OutputStream进行数据读写。

3)数据传输结束,调用 socket 实例的 close() 方法关闭链接。

UDP:

服务端(server):

1)指定本地端口建立 DatagramSocket 实例

2)经过字节数组,建立 DatagramPacket 实例,调用 DatagramSocket 实例的 receive() 方法,用 DatagramPacket 实例来接收数据

3)设置 DatagramPacket 实例返回的数据,调用 DatagramSocket 实例的 send() 方法来发送数据

4)数据传输完成,调用 DatagramSocket 实例的 close() 方法

客户端(client):

1)建立 DatagramSocket 实例

2)经过 IP 地址端口和数据建立 DatagramSocket 实例,调用 DatagramSocket 实例 send() 方法发送数据包

3)经过字节数组建立 DatagramSocket 实例,调用 DatagramSocket 实例 receive() 方法接受数据包

4)数据传输完成,调用 DatagramSocket 实例的 close() 方法


Socket编程的API接口:

(1)建立socket:socket()函数

函数原型:

int socket(int af, int type, int protocol);
  • af:为 IP 地址类型,经常使用的有 AF_INET 和 AF_INET6

  • type:type 为数据传输方式,经常使用的有 面向链接(SOCK_STREAM)方式(即TCP) 和 无链接(SOCK_DGRAM)的方式(即UDP)。

  • protocol:套接口所用的协议,经常使用的有 IPPROTO_TCPIPPTOTO_UDP,分别表示 TCP 传输协议和 UDP 传输协议。

(2)绑定套接字:bind()函数

函数原型:

int bind(int sock, struct sockaddr *addr, socklen_t addrlen);
  • sock参数:sock 为 socket 文件描述符。
  • addr参数:addr 为 sockaddr 结构体变量的指针。
  • addrlen参数:addrlen 为 addr 变量的大小,可由 sizeof() 计算得出。

(3)创建链接:connect()函数

函数原型:

int connect(int sock, struct sockaddr *serv_addr, socklen_t addrlen);

参数与bind()的参数相似。

(4)监听:listen()函数

函数原型:

int listen(int sock, int backlog);
  • sock参数:sock 为须要进入监听状态的套接字。
  • backlog参数:backlog 为请求队列的最大长度。

(5)接收请求:accept()函数

函数原型:

int accept(int sock, struct sockaddr *addr, socklen_t *addrlen);
  • sock参数:sock 为服务器端套接字。
  • addr参数:addr 为 sockaddr_in 结构体变量。
  • addrlen参数:addrlen 为参数 addr 的长度,可由 sizeof() 求得。
  • 返回值:一个新的套接字,用于与客户端通讯。

(6)关闭:close()函数

函数原型:

int close(int fd);
  • fd:要关闭的文件描述符。

HTTP协议:

HTTP超文本传输协议,HTTP协议主要就是用来进行客户端和服务器之间进行通讯的标准协议。HTTP主要规定了客户端如何与服务器创建链接、客户端如何从服务器请求数据、服务器如何响应请求,以及最后链接如何关闭。

创建链接:根据用户输入的URL地址,经过DNS、负载均衡等技术找到一台服务器,客户端与服务器的80端口创建一个TCP连接

进行请求:客户端向服务器发送消息,请求URL中指定的页面,要求执行指定的操做,包括 get post head

响应:服务器向客户端发送响应。响应以状态码开头。

关闭链接:客户端或服务端均可以关闭链接。每一个请求都是用一个单独的网络链接

缺点:

(1)通讯使用明文不加密,内容可能被窃听

(2)不验证通讯方身份,可能遭到假装

(3)没法验证报文完整性,可能被篡改

HTTPS协议:

超文本传输安全协议。是以安全为目标的HTTP通道,简单讲是HTTP的安全版,即HTTP下加入SSL层,HTTPS的安全基础是SSL,所以加密的详细内容就须要SSL。HTTP和HTTPS是两个不一样的协议。

主要做用:

1)创建一个信息安全通道,来保证数据传输的安全;

2)确认网站的真实性。

HTTP和HTTPS的区别:

一、https协议须要申请证书,通常免费证书较少,于是须要必定费用。

二、http是超文本传输协议,信息是明文传输,https则是具备安全性的ssl(Secure Sockets Layer)加密传输协议。

三、http和https使用的是彻底不一样的链接方式,用的端口也不同,前者是80,后者是443。

四、http的链接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。

结语: 全部文章已整理成文档,戳我领取更多java基础知识手册,也可关注后续发文。

相关文章
相关标签/搜索