仿拉手团购App9-- 产品详情界面
Posted 安卓笔记侠
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了仿拉手团购App9-- 产品详情界面相关的知识,希望对你有一定的参考价值。
1.传输层协议和应用层协议之间的关系
http=TCP+80
、https=TCP+443
、RDP=TCP+3389
、ftp=TCP+21
、共享文件夹=TCP+445
、SMTP=TCP+25
、PoP3=TCP+110
、telnet=TCP+23
、DNS=UDP+53
。这里相关的服务与应用层协议之间的关系是一个侦听的关系。当数据被发送到接收端的时候,接收端相应启动的服务会进行侦听。服务使用TCP
或UDP
的端口侦听客户的请求,客户端使用IP
地址定位服务器,使用目标端口定位服务,可以在服务器网卡上设置只开放必要的端口,实现服务器的网络安全。一些命令:
- 查看服务侦听的端口
netstat -anb
- 产看建立的会话
netstat -n
- 查看建立会话的进程
netstat -nb
- 测试连接远程计算机某个端口是否打开
telnet 192.168.80.100 3389
2 传输层功能
为相互通信的应用进程提供了逻辑通信
说明:传输层为应用进程之间提供端到端的逻辑通信(但网络层是为主机之间提供逻辑通信),还要对收到的报文进行差错检测,提供面向连接和无连接的服务。
3 传输层的端口
说明:
TCP
的端口:使用一个16
位端口号进行标志,具有本地意义,即端口号只是为了标志本计算机应用层中的各进程。在Internet
中不同计算机的相同端口号是没有联系的。
3.传输层协议TCP
3.1.使用:
socket
通信:我们可以将socket
理解为服务端和客户端之间的一条通道
1 客户端: 2 //必须先启动服务器后连接 3 public class MyClient { 4 public static void main(String[] args) throws UnknownHostException, IOException { 5 //1、创建客户端,必须指定服务器+端口,此时就在连接,如果不启动服务器则会报异常 6 Socket socket = new Socket("localhost", 8888); 7 //2.接收数据 8 /*BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream())); 9 String message = br.readLine();//阻塞式方法,在读取数据时必须要有行结束符*/ 10 DataInputStream dis = new DataInputStream(socket.getInputStream()); 11 String message = dis.readUTF(); 12 System.out.println(message); 13 } 14 } 15 16 服务端: 17 public class MyServer { 18 19 public static void main(String[] args) throws IOException { 20 //1、创建服务端,指定端口,这里可以指定端口为8888,即使客户端也是用8888,因为不同协议端口可以重复 21 ServerSocket serverSocket = new ServerSocket(8888); 22 //2、接收客户端的连接,阻塞式的 23 Socket socket = serverSocket.accept(); 24 System.out.println("一个客户端建立连接");//当运行程序,然后在浏览器访问此端口,则会打印 25 26 //3.发送数据和接收数据 27 String message = "欢迎使用"; 28 /* 29 //输出流 30 BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())); 31 bw.write(message); 32 bw.newLine();//向流中添加一个行结束符 33 bw.flush(); 34 //不要关闭 35 */ 36 DataOutputStream dos = new DataOutputStream(socket.getOutputStream()); 37 dos.writeUTF(message); 38 dos.flush(); 39 } 40 }
3.2三次握手
Sequenece Number:用来标识从TCP发送端向TCP接收端的数据字节流。
Acknowledgment Number:32位确认序号包发送确认的一端所期望收到的下一个序号,因此,确认需要应该是上次已成功收到数据字节序号+1,不过只有当标志位中的ACK标志(下面介绍)为1时该确认序列号的字段才有效。主要用来解决不丢包的问题。
4.传输层协议UDP
UDP
以数据为中心,不安全,非面向连接,数据可能丢失,但是效率较高。
4.1 类DatagramSocket和DatagramPacket
使用步骤:
-
1、客户端
(1)创建客户端DatagramSocket
类 + 指定端口
(2)准备数据 必须使用字节数组
(3)打包DatagramPacket
+服务器的地址和端口
(4)发送
(5)释放资源 -
2、服务器端
(1)创建服务端DatagramSocket
类+ 指定端口
(2)准备接收的容器(字节数组),封装DatagramPacket
(3)使用包接收数据
(4)分析数据
(5)释放资源 -
3、注意
发送的数据一定要转换成字节数组,同时udp
不是面向连接的,就算服务端没有开启,客户端这边运行也不会报错。
1 客户端: 2 //注意:要先开启服务端,但是先开启客户端也不会报错,但是数据会丢失。因为不是面向连接的 3 public class MyClient { 4 public static void main(String[] args) throws IOException { 5 //1、创建客户端+端口 6 DatagramSocket client = new DatagramSocket(6666);//注意和服务端的端口不要冲突 7 //2、准备数据,数据必须是字节数组 8 String message = "udp编程"; 9 10 //double 类型,需要将double类型转换为字节数组 11 double num = 89.12; 12 13 //byte[] data = message.getBytes(); 14 byte[] data = convert(num); 15 16 //3、将数据打包, 需要发送地址和端口 17 DatagramPacket packet = new DatagramPacket(data, data.length, new InetSocketAddress("localhost", 8888)); 18 //4、发送数据 19 client.send(packet); 20 //5、释放资源 21 client.close(); 22 } 23 //double-->字节数组 24 public static byte[] convert(double num) throws IOException{ 25 byte[] data = null; 26 ByteArrayOutputStream bos = new ByteArrayOutputStream(); 27 DataOutputStream dos = new DataOutputStream(bos); 28 dos.writeDouble(num); 29 dos.flush(); 30 31 //获得数据 32 data = bos.toByteArray(); 33 dos.close(); 34 35 return data; 36 } 37 } 38 39 服务端: 40 public class MyServer { 41 42 public static void main(String[] args) throws IOException { 43 //1、创建服务器+ 端口 44 DatagramSocket server = new DatagramSocket(8888);//有可能端口被占用 45 //2、准备接收容器 46 byte[] container = new byte[1024]; 47 //3、封装成包,下面这个构造函数是用来接收的 48 DatagramPacket packet = new DatagramPacket(container, container.length); 49 //4、接收数据 50 server.receive(packet); 51 //5、分析数据 52 //byte[] data = packet.getData(); 53 54 double data = convert(packet.getData()); 55 int len = packet.getLength(); 56 57 //System.out.println(new String(data, 0, len)); 58 System.out.println(data); 59 60 //6、释放资源 61 server.close(); 62 } 63 64 //字节数组-->Data 输入流 65 public static double convert(byte[] data) throws IOException{ 66 DataInputStream dis = new DataInputStream(new ByteArrayInputStream(data)); 67 double num = dis.readDouble(); 68 dis.close(); 69 return num; 70 } 71 }
http://www.52im.net/forum.php?mod=collection&action=view&ctid=3&fromop=all
以上是关于仿拉手团购App9-- 产品详情界面的主要内容,如果未能解决你的问题,请参考以下文章