Java 网络编程(二) 两类传输协议:TCP UDP

 

两类传输协议:TCP,UDP

 

TCP

  TCP是Transfer Control Protocol(传输控制协议)的简称,是一种面向连接的保证可靠传输的协议

  在TCP/IP协议中,

  IP层主要负责网络主机的定位,数据传输的路由,由IP地址可以唯一确定Internet上的一台主机

  而TCP层则提供面向应用的可靠的或非可靠的数据传输机制,这是网络编程的主要对象,一般不需要关心IP层是如何处理数据的。

  通过TCP协议传输,得到的是一个顺序的无差错的数据流。

  发送方和接收方的成对的两个socket之间必须建立连接,以便在TCP协议的基础上进行通信。

  当一个socket(通常都是server socket)等待建立连接时,另一个socket可以要求进行连接,一旦这两个socket连接起来,它们就可以进行双向数据传输,双方都可以进行发送或接收操作。

  TCP是一个基于连接的协议,它能够提供两台计算机之间的可靠的数据流。

  HTTP、FTP、Telnet等应用都需要这种可靠的通信通道。

 

UDP

  UDP是User Datagram Protocol的简称,是一种无连接的协议

  UDP是从一台计算机向另一台计算机发送称为数据报的独立数据包的协议,该协议并不保证数据报是否能正确地到达目的地,它是一个非面向连接的协议。

  每个数据报都是一个独立的信息,包括完整的源地址或目的地址,它在网络上以任何可能的路径传往目的地,因此能否到达目的地,到达时间以及内容的正确性都是不能保证的。

 

TCP和UDP的比较

  使用UDP时,每个数据报中都给出了完整的地址信息,因此无需建立发送方和接收方的连接。

  对于TCP协议,由于它是一个面向连接的协议,在socket之间进行数据传输之前必然要建立连接,所以在TCP中多了一个连接建立的时间。

 

  使用UDP传输数据时是有大小限制的,每个被传输的数据报必须限定在64KB之内。

  TCP没有这方面的限制,一旦连接建立起来,双方的socket就可以按统一的格式传输大量的数据。

 

  UDP是一个不可靠的协议,发送方所发送的数据报并不一定以相同的次序到达接收方。

  TCP是一个可靠的协议,它确保接收方完全正确地获取发送方所发送的全部数据。

  可靠的传输是要付出代价的,对数据内容正确性的检验必然占用计算机的处理时间和网络的带宽。因此TCP传输的效率不如UDP高。

 

  TCP在网路通信上有极强的生命力,例如远程连接(Telnet)和文件传输(FTP)都需要不定长度的数据被可靠地传输。

  相比之下UDP操作简单,而且仅需要较少的监护,因此通常用于局域网高可靠性的分散系统中client/server应用程序。

  

  此处推荐书籍《TCP/IP详解》,分三卷。

 

TCP/IP模型

  TCP/IP模型包括四个层次:

  应用层

  传输层

  网络层

  网络接口

  TCP/IP与OSI参考模型的对应关系:

  

 

JDK中的网络类

  通过java.net包中的类,java程序能够使用TCP或UDP协议在互联网上进行通讯。

  Java通过扩展已有的流式输入/输出接口和增加在网络上建立输入/输出对象特性这两个方法支持TCP/IP。

  Java支持TCP和UDP协议族。

  TCP用于网络的可靠的流式输入/输出。

  UDP支持更简单的、快速的、点对点的数据报模式。

 

参考资料

  圣思园张龙老师Java SE系列视频教程。

转载于:https://www.cnblogs.com/mengdd/archive/2013/03/09/2951841.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/474638.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java求最小数用哪个函数_在Java中使用小数进行计算的函数

例如,当您键入22和56时,此代码可以正常工作,它显示正确的结果import java.util.Scanner;class apples{public static void main(String args[]){Scanner villy new Scanner (System.in);double fnum, snum, answer;System.out.println("Enter first num: ");fnum v…

LeetCode MySQL 1285. 找到连续区间的开始和结束数字(dense_rank连续排名)

文章目录1. 题目2. 解题1. 题目 表:Logs ------------------------ | Column Name | Type | ------------------------ | log_id | int | ------------------------ id 是上表的主键。 上表的每一行包含日志表中的一个 ID。后来一些 ID 从 Logs 表…

java自定义标签简单_JSP 自定义标签之一 简单实例

在jsp中使用自定义标签可以达到这样的目的,事实上,我们所熟知的各类框架基本上都是通过自定义标签的形式来实现的。通过使用自定义标签,我们可以将实现复杂的逻辑在页面用简单的标签来加以展示。下面我们来实现一个非常简单的自定义标签&…

case study

To be continue...转载于:https://www.cnblogs.com/zhangzhang/archive/2013/03/10/2953199.html

LeetCode MySQL 1440. 计算布尔表达式的值(case when then else end)

文章目录1. 题目2. 解题1. 题目 表 Variables: ------------------------ | Column Name | Type | ------------------------ | name | varchar | | value | int | ------------------------ name 是该表主键. 该表包含了存储的变量及其对应的值.表…

phpstud如何安装mysql新版_phpstudy 升级mysql版本

phpstudy里没有地方可以设置mysql数据库,很多人都疑惑在phpstudy里怎么升级mysql数据库版本,本文就教你如何在phpstudy中升级mysql的版本。phpstudy集成环境中的mysql数据库的版本默认是mysql5.5,下面是phpstudy升级数据库到mysql5.7的方法&a…

AjaxControlToolkit AjaxFileUpload 为英文的解决办法

下载AjaxControlToolkit的源代码 在ajaxcontroltoolkit-a2a6dc6854e0\Client\MicrosoftAjax.Extended\ExtenderBase\BaseScriptsResources.zh-CHS.resx里按照例子 如下修改 <data name"AjaxFileUpload_SelectFile" xml:space"preserve"> <val…

LeetCode MySQL 1341. 电影评分

文章目录1. 题目2. 解题1. 题目 表&#xff1a;Movies ------------------------ | Column Name | Type | ------------------------ | movie_id | int | | title | varchar | ------------------------ movie_id 是这个表的主键。 title 是电影的名字…

Linux shell脚本 遍历带空格的文件名

一般的写法是 for f in ls ./ 但是如果文件名中带空格&#xff0c;比如"A B" 那么虽然ls能正确列出&#xff0c;但是for却会把空格当成分隔符 将A&#xff0c;B分别赋给f&#xff0c;导致变成两个文件名 研究发现问号&#xff1f;在文件名中也可以代表空格。因此可以…

java在画布上画出变量_急..JAVA 在画布上画拖动滚动条可扩大缩小的长方形

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼貌似题目要求是 Appliction 不是 Applet 哦改成这样&#xff1a;import java.awt.event.*;import java.awt.*;import java.applet.*;public class A extends Frame implements AdjustmentListener {Scrollbar mySlider;int r;publi…

sklearn 机器学习 Pipeline 模板

文章目录1. 导入工具包2. 读取数据3. 数字特征、文字特征分离4. 数据处理Pipeline5. 尝试不同的模型6. 参数搜索7. 特征重要性筛选8. 最终完整Pipeline使用 sklearn 的 pipeline 搭建机器学习的流程 本文例子为 [Kesci] 新人赛 员工满意度预测 参考 [Hands On ML] 2. 一个完整…

php获取表单信息的代码_PHP获取HTML文件名表单数据等

1、PHP获取表单各项数据 --- 与表单提交的方式有关GET方式&#xff0c;格式&#xff1a;$_GET[“formelement”]POST方式&#xff0c;格式&#xff1a;$_POST[“formelement”]REQUEST方式&#xff0c;格式&#xff1a;$_REQUEST[“formelement”]2、表单中上传文件的数据数组&…

SQL Server 批量插入数据的两种方法

在SQL Server 中插入一条数据使用Insert语句&#xff0c;但是如果想要批量插入一堆数据的话&#xff0c;循环使用Insert不仅效率低&#xff0c;而且会导致SQL一系统性能问题。下面介绍SQL Server支持的两种批量数据插入方法&#xff1a;Bulk和表值参数(Table-Valued Parameters…

LeetCode MySQL 1532. The Most Recent Three Orders(dense_rank + over窗口函数)

文章目录1. 题目2. 解题1. 题目 Table: Customers ------------------------ | Column Name | Type | ------------------------ | customer_id | int | | name | varchar | ------------------------ customer_id is the primary key for this table. T…

php 负载监控_php记录服务器负载、内存、cpu状态的代码

通过调用系统命令top&#xff0c;然后借助函数explode&#xff0c;实现记录服务器负载、内存使用情况、cpu当前状态等信息。代码如下&#xff1a;/*** 记录服务器负载、内存使用、cpu状态* 每10秒检测一次* edit by www.jbxue.com*/while(1){exec(top -b -n 1 -d 3,$out);$Cpu …

Dota改键

利用全局钩子 制作一个个性化的dota游戏改键&#xff01; dll部分&#xff1a; // FileName: add.cpp#include <Windows.h>/* 定义全局变量 */ HWND g_hwnd NULL; HHOOK g_hKeyboard NULL;// 设置数据段 #pragma data_seg("MySec") static WORD g_keyNum[6]{…

LeetCode MySQL 1501. 可以放心投资的国家

文章目录1. 题目2. 解题1. 题目 表 Person: ------------------------- | Column Name | Type | ------------------------- | id | int | | name | varchar | | phone_number | varchar | ------------------------- id 是该表主键. 该表…

php 小数末尾进1,PHP小数点最后一位加1、减1

比如我有几个数字(小数点后面的位数不固定)&#xff1a;1、155.0552、122.1963、0.9631我怎么做才能让这些数字的小数点最后一位1&#xff0c;或者-1&#xff1f;比如1的话希望得到&#xff1a;1、155.0562、122.1973、0.9632回复内容&#xff1a;比如我有几个数字(小数点后面的…

ARM汇编Hello,World

1. 编译运行环境见http://www.cnblogs.com/linucos/archive/2013/03/01/2938517.htm2. 汇编例子.data msg: .asciz "hello, world\n" .text .global main …

LeetCode MySQL 1270. 向公司CEO汇报工作的所有人

文章目录1. 题目2. 解题1. 题目 员工表&#xff1a;Employees ------------------------ | Column Name | Type | ------------------------ | employee_id | int | | employee_name | varchar | | manager_id | int | ------------------------ employee_…