网络
HTTP协议
默认端口:80
主要特点:
1、支持客户/服务器模式
2、简单快速:客户向服务端请求服务时,只需传送请求方式和路径。
3、灵活:允许传输任意类型的数据对象。由Content-Type加以标记。
4、无连接:每次响应一个请求,响应完成以后就断开连接。
5、无状态:服务器不保存浏览器的任何信息。每次提交的请求之间没有关联。
HTTP1.0默认非持续性;HTTP1.1默认持续性
持续性:浏览器和服务器建立TCP连接后,可以请求多个对象
非持续性:浏览器和服务器建立TCP连接后,只能请求一个对象
流水线:不必等到收到服务器的回应就发送下一个报文。
非流水线:发出一个报文,等到响应,再发下一个报文。类似TCP。
POST和GET的区别:
Post一般用于更新或者添加资源信息 | Get一般用于查询操作,而且应该是安全和幂等的 |
---|---|
Post更加安全 | Get会把请求的信息放到URL的后面 |
Post传输量一般无大小限制 | Get不能大于2KB |
Post执行效率低 | Get执行效率略高 |
- Get将参数拼成URL,放到header消息头里传递
- Post直接以键值对的形式放到消息体中传递。
- 但两者的效率差距很小很小
Https
- 端口号是443
- 是由SSL+Http协议构建的可进行加密传输、身份认证的网络协议。
Socket
使用TCP
客户端
Socket socket = new Socket("ip", 端口); InputStream is = socket.getInputStream(); DataInputStream dis = new DataInputStream(is); OutputStream os = socket.getOutputStream(); DataInputStream dos = new DataOutputStream(os);
服务器端
ServerSocket serverSocket = new ServerSocket(端口); Socket socket = serverSocket.accept(); //获取流的方式与客户端一样
读取输入流
byte[] buffer = new byte[1024]; do{ int count = is.read(buffer); if(count <= 0){ break; } else{ // 对buffer保存或者做些其他操作 } } while(true);
使用UDP
客户端和服务器端一样的
DatagramSocket socket = new DatagramSocket(端口); InetAddress serverAddress = InetAddress.getbyName("ip"); //发送 DatagramPackage packet = new DatagramPacket(buffer, length, host, port); socket.send(packet); //接收 byte[] buf = new byte[1024]; DatagramPacket packet = new DatagramPacket(buf, 1024); Socket.receive(packet);
TCP与UDP的区别
TCP面向有链接的通信服务 | UDP面向无连接的通信服务 |
TCP提供可靠的通信传输 | UDP不可靠,会丢包 |
TCP保证数据顺序 | UDP不保证 |
TCP数据无边界 | UDP有边界 |
TCP速度快 | UDP速度慢 |
TCP面向字节流 | UDP面向报文 |
TCP一对一 | UDP可以一对一,一对多 |
TCP报头至少20字节 | UDP报头8字节 |
TCP有流量控制,拥塞控制 | UDP没有 |
Linux下的IPC几种通信方式
- 管道(pipe):管道可用于具有亲缘关系的进程间的通信,是一种半双工的方式,数据只能单向流动,允许一个进程和另一个与它有公共祖先的进程之间进行通信。
- 命名管道(named pipe):命名管道克服了管道没有名字的限制,同时除了具有管道的功能外(也是半双工),它还允许无亲缘关系进程间的通信。命令管道在文件系统中有对应的文件名。命令管道通过命令mkfifo或系统调用mkfifo来创建。
- 信号(signal):信号是比较复杂的通信方式,用于通知接收进程有某种事件发生了,除了进程间通信外,进程还可以发送信号给进程本身。
- 消息队列:消息队列是消息的链接表,包括Posix消息队列和system V消息队列。有足够权限的进程可以向队列中添加消息,被赋予读权限的进程可以读走队列中的消息。消息队列克服了信号承载信息少,管道只能承载无格式字节流以及缓冲区大小受限等缺点。
- 共享内存:使得多个进程可以访问同一块内存空间,是最快的IPC形式。是针对其他通信机制运行效率低而设计的。往往与其他通信机制,如信号量结合使用,来达到进程间的同步及互斥。
- 内存映射:内存映射允许任何多个进程间通信每一个使用该机制的进程通过把一个共享的文件映射到自己的进程地址空间来实现它。
- 信号量(semaphore):主要作为进程间以及同一进程不同线程之间的同步手段。
- 套接字(Socket):更为一般的进程间通信机制,可用于不同机器之间的进程间通信。