HTTP协议
HTTP一使用有两种形式,一种是HttpURLConnection,一种是HttpClient
1.设置HTTP请求所使用的方法(GET:希望从服务器那里获取数据;POST:希望提交数据给服务器);
connection.setRequestMethod(“GET”);
1.*定制,设置读取超时.setReadTimeout(毫秒);
2.调用getInputStream()获取到服务器返回的输入流,然后对其进行读取
3.调用disconnect()将HTTP连接关闭;
网络的七层模型介绍
TCP和UDP的区别
TCP/IP网络模型:
TCP编程的服务器端一般步骤是:
1、创建一个socket,用函数socket(); SOCKET SocketListen =socket(AF_INET,SOCK_STREAM, IPPROTO_TCP);
2、设置socket属性,用函数setsockopt(); * 可选
3、绑定IP地址、端口等信息到socket上,用函数bind(); SOCKET_ERROR = bind(SocketListen,(const sockaddr*)&addr,sizeof(addr))
4、开启监听,用函数listen(); SOCKET_ERROR == listen(SocketListen,2)
5、接收客户端上来的连接,用函数accept(); SOCKET SocketWaiter = accept(SocketListen,
UDP:
与之对应的UDP编程步骤要简单许多,分别如下:
UDP编程的服务器端一般步骤是:
1、创建一个socket,用函数socket();
2、设置socket属性,用函数setsockopt();* 可选
3、绑定IP地址、端口等信息到socket上,用函数bind();
4、循环接收数据,用函数recvfrom();
5、关闭网络连接;
三次握手和四次挥手
三次握手:
第一次:客户端发送初始序号x和syn=1请求标志
第二次:服务器发送请求标志syn,发送确认标志ACK,发送自己的序号seq=y,发送客户端的确认序号ack=x+1
第三次:客户端发送ACK确认号,发送自己的序号seq=x+1,发送对方的确认号ack=y+1
四次挥手:
第一次挥手:客户端发出释放FIN=1,自己序列号seq=u,进入FIN-WAIT-1状态
第二次挥手:服务器收到客户端的后,发出ACK=1确认标志和客户端的确认号ack=u+1,自己的序列号seq=v,进入CLOSE-WAIT状态
第三次挥手:客户端收到服务器确认结果后,进入FIN-WAIT-2状态。此时服务器发送释放FIN=1信号,确认标志ACK=1,确认序号ack=u+1,自己序号seq=w,服务器进入LAST-ACK(最后确认态)
第四次挥手:客户端收到回复后,发送确认ACK=1,ack=w+1,自己的seq=u+1,客户端进入TIME-WAIT(时间等待)。客户端经过2个最长报文段寿命后,客户端CLOSE;服务器收到确认后,立刻进入CLOSE状态。
Socket编程
对于服务器来说,服务器先初始化socket,然后端口绑定(bind),再对端口监听(listen),调用accept阻塞,等待客户端连接请求。对于客户端来说,客户端初始化socket,然后申请连接(connection)。客户端申请连接,服务器接受申请并且回复申请许可(这里要涉及TCP三次握手连接),然后发送数据,最后关闭连接,这是一次交互过程。
UDP编程
服务端
DatagramSocket(int port) 指定端口获得发送的数据报
客户端
DatagramSocket() 作为客户端使用
主要方法
receive(DatagramPacket) 接收数据包
send(DatagramPacket) 发送数据报
对于有些场景,比如频繁上报的心跳数据,或者车辆GPS数据,因为丢失一条或者多条,对于整个系统的影响很小,或者说没有,这样的场景,在能够保证数据传输效率的前提下,使用UDP可能更合适。