黑马程序员_UDP和TCP简单的通信代码和注释学习笔记
2014-03-14 13:28
701 查看
------- android培训、java培训、期待与您交流! ----------
前言
UDP和TCP是比较常见的网络层通信协议。
从我自己概念上的理解:
从网络协议解析的角度来看,底层的IP协议解析完,获取IP地址,并确认后,就可以上抛给UDP或TCP来处理了。
从简单认知的角度来看,UDP和TCP做的相同的一件事,就是根据报文中指定的目的端口,转发各个报文到具体的应用程序。
首先,回顾一下Socket的概念:
Socket就是为了网络服务提供的一种机制。
通信的两端都有Socket。
网络通信其实就是Socket间的通信。
数据在两个Socket间通过IO传输。
下面就说明一下具体的代码实现:
UDP发送端的代码流程:
UDP接收端的代码流程:
感想:
从程序的角度而言:
1、对于UDP来说,是发送端与接收端的关系。
2、UDP是面向发送无连接的,也就是说,发送端只管发,不用确认是否能够达到接收端。
3、同时,很明显的,UDP是通过封装、解析数据包(Datapacket)的方式实现通信的。
4、接收端的receice()方法,是阻塞式方法。
5、Udp如果要建立双向的连接,需要通信两边都有发送端和接收端。
TCP客户端的代码:
TCP服务端的代码:
感想:
从程序的角度而言:
1、对于TCP来说,是服务端与客户端的关系。
2、TCP是面向连接的,也就是说,如果服务端、客户端没办法建立三次握手的连接通路,否则,根本没有数据传输可言。
3、同时,很明显的,TCP是通过流的方式实现通信的。
4、当然流中的read()方法和服务端的accpet()方法,是阻塞式方法。
5、TCP如果要建立双向的连接,只要保证连接通路,通过IO流就可以实现了。
------- android培训、java培训、期待与您交流! ----------
前言
UDP和TCP是比较常见的网络层通信协议。
从我自己概念上的理解:
从网络协议解析的角度来看,底层的IP协议解析完,获取IP地址,并确认后,就可以上抛给UDP或TCP来处理了。
从简单认知的角度来看,UDP和TCP做的相同的一件事,就是根据报文中指定的目的端口,转发各个报文到具体的应用程序。
首先,回顾一下Socket的概念:
Socket就是为了网络服务提供的一种机制。
通信的两端都有Socket。
网络通信其实就是Socket间的通信。
数据在两个Socket间通过IO传输。
下面就说明一下具体的代码实现:
UDP发送端的代码流程:
public static void main(String[] args) throws IOException{ //1、创建udp服务,通过DatagramSocket DatagramSocket ds = new DatagramSocket(); //验证用数据 byte[] data = "udp".getBytes(); //2、根据数据,封装成数据包 DatagramPacket dp = new DatagramPacket(data, data.length, InetAddress.getByName("127.0.0.1"), 10000); //3、通过socket服务,将已有的数据包发送出去,通过send方法。 ds.send(dp); //4、关闭资源 ds.close(); }
UDP接收端的代码流程:
public static void main(String[] args) throws IOException { //1、创建udp socket建立端点。要确定监听端口 DatagramSocket ds = new DatagramSocket(10000); //2、定义数据包,用于存储 byte[] buf = new byte[1024]; DatagramPacket dp = new DatagramPacket(buf, buf.length); //3、通过服务的receive方法将受到的数据存入数据包中 ds.receive(dp); //4、通过数据包的方法获取其中的数据 System.out.println(new String(dp.getData(),0,dp.getLength())); //5、关闭资源 ds.close(); }
感想:
从程序的角度而言:
1、对于UDP来说,是发送端与接收端的关系。
2、UDP是面向发送无连接的,也就是说,发送端只管发,不用确认是否能够达到接收端。
3、同时,很明显的,UDP是通过封装、解析数据包(Datapacket)的方式实现通信的。
4、接收端的receice()方法,是阻塞式方法。
5、Udp如果要建立双向的连接,需要通信两边都有发送端和接收端。
TCP客户端的代码:
public static void main(String[] args) throws UnknownHostException, IOException { //创建客户端socket服务,指定目的的主机端口 Socket s = new Socket("127.0.0.1",10003); //打开Socket输出流 OutputStream ops = s.getOutputStream(); //打开写入数据 ops.write("Hello tcp".getBytes()); //关闭输出流(如果服务端出现循环循环read的情况,必去用该方法) s.shutdownOutput(); //获取输入流 InputStream ips = s.getInputStream(); byte[] buf = new byte[1024]; int len = ips.read(buf); System.out.println(new String(buf,0,len)); //关闭流 s.close(); }
TCP服务端的代码:
public static void main(String[] args) throws IOException { //创建服务端Socket,指定监听端口 ServerSocket ss = new ServerSocket(10003); //获取客户端Socket流 Socket s = ss.accept(); //获取输入流 InputStream ips = s.getInputStream(); //获取输入流中的数据 byte[] buf = new byte[1024]; int len = ips.read(buf); System.out.println(new String(buf,0,len)); //获取输出流 OutputStream ops = s.getOutputStream(); ops.write("ok!".getBytes()); //关闭客户端流对象 s.close(); //关闭服务端流对象 ss.close(); }
感想:
从程序的角度而言:
1、对于TCP来说,是服务端与客户端的关系。
2、TCP是面向连接的,也就是说,如果服务端、客户端没办法建立三次握手的连接通路,否则,根本没有数据传输可言。
3、同时,很明显的,TCP是通过流的方式实现通信的。
4、当然流中的read()方法和服务端的accpet()方法,是阻塞式方法。
5、TCP如果要建立双向的连接,只要保证连接通路,通过IO流就可以实现了。
------- android培训、java培训、期待与您交流! ----------
相关文章推荐
- 【tcp-ip学习总结】基础UDP实现的简单通信功能小程序
- TCP-IP学习笔记七:Netty使用--简单通信编程3
- 简单的tcp与udp通信 java代码
- 《Unix网络编程》学习笔记 1 (TCP UDP 简单认识 摘抄)
- TCP-IP学习笔记五:Netty使用--简单通信编程1
- QT学习过程及简单串口和UDP通信demo开发过程及代码分享
- TCP-IP学习笔记六:Netty使用--简单通信编程2
- 【deep learning学习笔记】注释yusugomori的RBM代码 --- 头文件
- 基于linux简单的TCP/IP网络通信代码
- 网络基础学习笔记二------UDP通信之服务器端
- Linux网络编程之socket简单通信TCP--服务端代码
- MFC学习笔记之——>MFC下的TCP通信的建立
- [Java] Tcp/udp 简单通信
- 【deep learning学习笔记】注释yusugomori的DA代码 --- dA.cpp -- 训练
- 网络编程(UDP/TCP)+JAVA学习笔记-DAY26
- linux C ----- udp, tcp, unix socket通信简单例子
- WindowsPhone8 应用开发学习笔记(三) - UDP通信
- 黑马程序员_毕向东_Java基础_DAY03_循环控制_学习笔记
- 基于linux简单的UDP网络通信代码
- python网络编程学习笔记(2)--TCP和UDP区别(补充)