如何实现TCP和UDP传输
面向连接的TCP “面向连接”就是在正式通信前必须要与对方建立起连接。比如你给别人打电话,必须等线路接通了、对方拿起话筒才能相互通话。TCP(Transmission Control Protocol,传输控制协议)是基于连接的协议,也就是说,在正式收发数据前,必须和对方建立可靠的连接。一个TCP连接必须要经过三次“对话”才能建立起来,其中的过程非常复杂,我们这里只做简单、形象的介绍,你只要做到能够理解这个过程即可。我们来看看这三次对话的简单过程:主机A向主机B发出连接请求数据包:“我想给你发数据,可以吗?”,这是第一次对话;主机B向主机A发送同意连接和要求同步(同步就是两台主机一个在发送,一个在接收,协调工作)的数据包:“可以,你什么时候发?”,这是第二次对话;主机A再发出一个数据包确认主机B的要求同步:“我现在就发,你接着吧!”,这是第三次对话。三次“对话”的目的是使数据包的发送和接收同步,经过三次“对话”之后,主机A才向主机B正式发送数据。TCP协议能为应用程序提供可靠的通信连接,使一台计算机发出的字节流无差错地发往网络上的其他计算机,对可靠性要求高的数据通信系统往往使用TCP协议传输数据。面向非连接的UDP协议“面向非连接”就是在正式通信前不必与对方先建立连接,不管对方状态就直接发送。这与现在风行的手机短信非常相似:你在发短信的时候,只需要输入对方手机号就OK了。UDP(User Data Protocol,用户数据报协议)是与TCP相对应的协议。它是面向非连接的协议,它不与对方建立连接,而是直接就把数据包发送过去!UDP适用于一次只传送少量数据、对可靠性要求不高的应用环境。比如,我们经常使用“ping”命令来测试两台主机之间TCP/IP通信是否正常,其实“ping”命令的原理就是向对方主机发送UDP数据包,然后对方主机确认收到数据包,如果数据包是否到达的消息及时反馈回来,那么网络就是通的。例如,在默认状态下,一次“ping”操作发送4个数据包(如图2所示)。大家可以看到,发送的数据包数量是4包,收到的也是4包(因为对方主机收到后会发回一个确认收到的数据包)。这充分说明了UDP协议是面向非连接的协议,没有建立连接的过程。正因为UDP协议没有连接的过程,所以它的通信效果高;但也正因为如此,它的可靠性不如TCP协议高。QQ就使用UDP发消息,因此有时会出现收不到消息的情况。TCP协议和UDP协议各有所长、各有所短,适用于不同要求的通信环境。 望采纳
直接上代码,仅供参考,具体 tcp、udp的通信原理很容易找到。 TCP服务器端代码:try {Boolean endFlag = false;ServerSocket ss = new ServerSocket(12345);while (!endFlag) {// 等待客户端连接Socket s = ss.accept();BufferedReader input = new BufferedReader(newInputStreamReader(s.getInputStream()));//注意第二个参数据为true将会自动flush,否则需要需要手动操作output.flush()PrintWriter output = newPrintWriter(s.getOutputStream(),true);String message = input.readLine();Log.d("Tcp Demo", "message from Client:"+message);output.println("message received!");//output.flush();if("shutDown".equals(message)){endFlag=true;}s.close();}ss.close();} catch (UnknownHostException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}TCP客户端代码:try {Socket s = new Socket("localhost", 12345);// outgoing stream redirect to socketOutputStream out = s.getOutputStream();// 注意第二个参数据为true将会自动flush,否则需要需要手动操作out.flush()PrintWriter output = new PrintWriter(out, true);output.println("Hello IdeasAndroid!");BufferedReader input = new BufferedReader(newInputStreamReader(s.getInputStream()));// read line(s)String message = input.readLine();Log.d("Tcp Demo", "message From Server:" + message);s.close();} catch (UnknownHostException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}下面我们看看UDP:UDP服务器端代码:// UDP服务器监听的端口Integer port = 12345;// 接收的字节大小,客户端发送的数据不能超过这个大小byte[] message = new byte[1024];try {// 建立Socket连接DatagramSocket datagramSocket = new DatagramSocket(port);DatagramPacket datagramPacket = new DatagramPacket(message,message.length);try {while (true) {// 准备接收数据datagramSocket.receive(datagramPacket);Log.d("UDP Demo", datagramPacket.getAddress().getHostAddress().toString()+ ":" + new String(datagramPacket.getData()));}} catch (IOException e) {e.printStackTrace();}} catch (SocketException e) {e.printStackTrace();}UDP客户端代码:public static void send(String message) {message = (message == null ? "Hello IdeasAndroid!" : message);int server_port = 12345;DatagramSocket s = null;try {s = new DatagramSocket();} catch (SocketException e) {e.printStackTrace();}InetAddress local = null;try {// 换成服务器端IPlocal = InetAddress.getByName("localhost");} catch (UnknownHostException e) {e.printStackTrace();}int msg_length = message.length();byte[] messagemessageByte = message.getBytes();DatagramPacket p = new DatagramPacket(messageByte, msg_length, local,server_port);try {s.send(p);} catch (IOException e) {e.printStackTrace();} }
面向连接的TCP “面向连接”就是在正式通信前必须要与对方建立起连接。比如你给别人打电话,必须等线路接通了、对方拿起话筒才能相互通话。TCP(Transmission Control Protocol,传输控制协议)是基于连接的协议,也就是说,在正式收发数据前,必须和对方建立可靠的连接。一个TCP连接必须要经过三次“对话”才能建立起来,其中的过程非常复杂,我们这里只做简单、形象的介绍,你只要做到能够理解这个过程即可。我们来看看这三次对话的简单过程:主机A向主机B发出连接请求数据包:“我想给你发数据,可以吗?”,这是第一次对话;主机B向主机A发送同意连接和要求同步(同步就是两台主机一个在发送,一个在接收,协调工作)的数据包:“可以,你什么时候发?”,这是第二次对话;主机A再发出一个数据包确认主机B的要求同步:“我现在就发,你接着吧!”,这是第三次对话。三次“对话”的目的是使数据包的发送和接收同步,经过三次“对话”之后,主机A才向主机B正式发送数据。TCP协议能为应用程序提供可靠的通信连接,使一台计算机发出的字节流无差错地发往网络上的其他计算机,对可靠性要求高的数据通信系统往往使用TCP协议传输数据。面向非连接的UDP协议“面向非连接”就是在正式通信前不必与对方先建立连接,不管对方状态就直接发送。这与现在风行的手机短信非常相似:你在发短信的时候,只需要输入对方手机号就OK了。UDP(User Data Protocol,用户数据报协议)是与TCP相对应的协议。它是面向非连接的协议,它不与对方建立连接,而是直接就把数据包发送过去!UDP适用于一次只传送少量数据、对可靠性要求不高的应用环境。比如,我们经常使用“ping”命令来测试两台主机之间TCP/IP通信是否正常,其实“ping”命令的原理就是向对方主机发送UDP数据包,然后对方主机确认收到数据包,如果数据包是否到达的消息及时反馈回来,那么网络就是通的。例如,在默认状态下,一次“ping”操作发送4个数据包(如图2所示)。大家可以看到,发送的数据包数量是4包,收到的也是4包(因为对方主机收到后会发回一个确认收到的数据包)。这充分说明了UDP协议是面向非连接的协议,没有建立连接的过程。正因为UDP协议没有连接的过程,所以它的通信效果高;但也正因为如此,它的可靠性不如TCP协议高。QQ就使用UDP发消息,因此有时会出现收不到消息的情况。 TCP协议和UDP协议各有所长、各有所短,适用于不同要求的通信环境。
专家监定咪得咯

udp是什么意思啊?
udp是用户数据包协议。Internet协议集支持一个无连接的传输协议,该协议称为用户数据包协议(UDP,User Datagram Protocol)。UDP 为应用程序提供了一种无需建立连接就可以发送封装的 IP 数据包的方法。RFC 768描述了 UDP。Internet 的传输层有两个主要协议,互为补充。无连接的是 UDP,它除了给应用程序发送数据包功能并允许它们在所需的层次上架构自己的协议之外,几乎没有做什么特别的事情。面向连接的是 TCP,该协议几乎做了所有的事情。特点:UDP提供了无连接通信,且不对传送数据包进行可靠性保证,适合于一次传输少量数据,UDP传输的可靠性由应用层负责。常用的UDP端口号有:53(DNS)、69(TFTP)、161(SNMP),使用UDP协议包括:TFTP、SNMP、NFS、DNS、BOOTP。UDP报文没有可靠性保证、顺序保证和流量控制字段等,可靠性较差。但是正因为UDP协议的控制选项较少,在数据传输过程中延迟小、数据传输效率高,适合对可靠性要求不高的应用程序,或者可以保障可靠性的应用程序,如DNS、TFTP、SNMP等。

传输控制协议tcp 与udp 的区别
1)连接vs无连接:TCP面向连接,在收发数据前必须和对方建立可靠的连接;UDP是无连接的,发送数据前是不需要建立连接,当它想传送时就简单的去抓取来自应用程序的数据,并尽可能快的把它扔到网络上。2)可靠性:TCP提供交付保证,是可靠的,意味着一个使用TCP协议发送的消息是保证交付给客户端的,如果消息在传输过程中丢失,那么它将重发,通过TCP连接传送的数据,没有差错,不丢失,不重复,且按序到达;UDP不提供任何交付保证,是不可靠的,,他是尽最大的努力,即不保证可靠地交付3)有序性:TCP也保证了消息的有序性,该消息将从服务器端发送的同样的顺序发送到客户端,尽管这些消息到网络的另一端时可能是无序的,但TCP协议将会为你排好序;UDP不提供任何有序性或序列性的保证,数据包将以任何可能的顺序到达(尽管有基于UDP的协议通过使用序列号和重传来提供有序的可靠的应用)4)数据边界:TCP不保存数据的边界,数据以字节流的形式发送,并没有明显的标志表明传输信号消息的边界;UDP保存数据的边界,数据包单独发送,只要当他们到达时,才会再次集成,包有明确的界限表明哪些包已经收到,这意味着在消息发送后,在接收器接口将会有一个读操作,来生成一个完成的消息5)速度:TCP比较慢,因为TCP必须创建连接,以保证消息的可靠交付和有序性,他需要做比UDP多得多的事UDP比较快6)重量级vs轻量级TCP被认为是重量级的协议UDP被认为是轻量级的协议,因为UDP传输的信息中不承担任何间接创造连接,保证交货或秩序的信息7)头大小TCP数据包报头的大小是20字节,TCP报头中包含序列号,ACK号,数据偏移量,保留,控制位,窗口,紧急指针,可选项,填充项,校验位,源端口和目的端口UDP数据包报头的大小是8字节,UDP报头中只包含长度,源端口号,目的端口和校验和8)拥塞或流控制TCP有流量控制和拥塞控制UDP不能进行流量控制无拥塞控制9)对接每一条TCP的连接是点到点的;UDP支持一对一,一对多和多对多的交互通信10)适合场景TCP提供可靠交付和有序性的保证,它最适合需要高可靠并对传输时间要求不高的应用,如金融领域UDP更适合的应用程序需要快速,高效的传输应用,如游戏和娱乐场所

UDP是什么,UDP协议及优缺点
UDP,全称 User Datagram Protocol,中文名称为用户数据报协议,主要用来支持那些需要在计算机之间传输数据的网络连接。UDP协议从问世至今已经被使用了很多年,虽然目前 UDP 协议的应用不如 TCP 协议广泛,但 UDP 依然是一种非常实用和可行的网络传输层协议。尤其是在一些实时性很强的应用场景中,比如网络游戏、视频会议等,UDP 协议的快速能力更具有独特的魅力。UDP 是一种面向非连接的协议,面向非连接指的是在正式通信前不必与对方先建立连接,不管对方状态就直接发送数据。至于对方是否可以接收到这些数据,UDP 协议无法控制,所以说 UDP 是一种不可靠的协议。UDP 协议适用于一次只传送少量数据、对可靠性要求不高的应用环境。与前面介绍的 TCP 协议一样,UDP 协议直接位于 IP 协议之上。实际上,IP 协议属于 OSI 参考模型的网络层协议,而 UDP 协议和 TCP 协议都属于传输层协议。因为 UDP 是面向非连接的协议,没有建立连接的过程,因此它的通信效率很高,但也正因为如此,它的可靠性不如 TCP 协议。UDP 协议的主要作用是完成网络数据流和数据报之间的转换在信息的发送端,UDP 协议将网络数据流封装成数据报,然后将数据报发送出去;在信息的接收端,UDP 协议将数据报转换成实际数据内容。可以认为 UDP 协议的 socket 类似于码头,数据报则类似于集装箱。码头的作用就是负责友送、接收集装箱,而 socket 的作用则是发送、接收数据报。因此,对于基于 UDP 协议的通信双方而言,没有所谓的客户端和服务器端的概念。UDP 协议和 TCP 协议简单对比如下:TCP 协议:可靠,传输大小无限制,但是需要连接建立时间,差错控制开销大。UDP 协议:不可靠,差错控制开销较小,传输大小限制在 64 KB以下,不需要建立连接。?相比较 TCP,UDP 是一种不可靠的网络协议,它在通信实例的两端各建立一个 socket,但这两个 socket 之间并没有虚拟链路,它们只是发送、接收数据报的对象。

tcp和udp传输效率
UDP的传输效率高于TCP局域网丢包率几乎为0,可以考虑用udp 不过局域网下的tcp速度也不慢, 可以把缓冲区设置的大点, 几乎可以接近网卡速度

本文由 在线网速测试 整理编辑,转载请注明出处。