乐趣区

关于java:基于TCPUDP的Socket编程HTTPHTTPS协议

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

UDP:用户数据报协定 (User Datagram Protocol) 是一种无连贯的传输层协定,提供面向事务的简略不牢靠信息传送服务,能够保障通信效率,传输延时小。

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


TCP:

服务端(server):

1)创立 ServerSocket 实例,指定本地的端口,用于监听其连贯申请。
2)调用 socket 的 accept()办法取得客户端的连贯申请,通过 accept()办法返回的 socket 实例,建设与客户端的连贯。
3)通过返回的 Socket 实例来取得 InputStream 和 OutputStream, 进行数据的写入和读出。
4)数据传输完结,调用 socket 实例的 close() 办法敞开连贯。

客户端(client):

1)创立 Socket 实例,通过指定的服务器地址和端口建设连贯。
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 的区别:

1、https 协定须要申请证书,个别收费证书较少,因此须要肯定费用。
2、http 是超文本传输协定,信息是明文传输,https 则是具备安全性的 ssl(Secure Sockets Layer)加密传输协定。
3、http 和 https 应用的是齐全不同的连贯形式,用的端口也不一样,前者是 80,后者是 443。
4、http 的连贯很简略,是无状态的;HTTPS 协定是由 SSL+HTTP 协定构建的可进行加密传输、身份认证的网络协议,比 http 协定平安。

结语:
所有文章已整顿成文档,戳我支付更多 java 基础知识手册,也可关注后续发文。

退出移动版