TCP是Tranfer Control Protocol的 简称,是一种面向连接的保证可靠传输的协议。通过TCP协议传输,得到的是一个顺序的无差错的数据流。发送方和接收方的成对的两个socket之间必须建 立连接,以便在TCP协议的基础上进行通信,当一个socket(通常都是server socket)等待建立连接时,另一个socket可以要求进行连接,一旦这两个socket连接起来,它们就可以进行双向数据传输,双方都可以进行发送 或接收操作。

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

UDP:

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

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

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

TCP:

1,面向连接的协议,在socket之间进行数据传输之前必然要建立连接,所以在TCP中需要连接时间。

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

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

应用

1,TCP在网络通信上有极强的生命力,例如远程连接(Telnet)和文件传输(FTP)都需要不定长度的数据被可靠地传输。但是可靠的传输是要付出代价的,对数据内容正确性的检验必然占用计算机的处理时间和网络的带宽,因此TCP传输的效率不如UDP高。

2,UDP操作简单,而且仅需要较少的监护,因此通常用于局域网高可靠性的分散系统中client/server应用程序。例如视频会议系统,并不要求音频视频数据绝对的正确,只要保证连贯性就可以了,这种情况下显然使用UDP会更合理一些。

Socket所支持的协议种类也不光TCP/IP一种,因此两者之间是没有必然联系的。在Java环境下,Socket编程主要是指基于TCP/IP协议的网络编程。

java类

java在包java.net中提供了两个类Socket和ServerSocket,分别用来表示双向连接的客户端和服务端。在其构造函数中address、host和port分别是双向连接中另一方的IP地址、主机名和端 口号,stream指明socket是流socket还是数据报socket,localPort表示本地主机的端口号,localAddr和 bindAddr是本地机器的地址(ServerSocket的主机地址),impl是Socket的父类,既可以用来创建serverSocket又可 以用来创建Socket。count则表示服务端所能支持的最大连接数。

实现UDP传输的类为DatagramSocket和DatagramPacket。

场景描述:

TCP

Server端:

1. 构建一个ServerSocket实例,指定本地的端口。这个socket就是用来监听指定端口的连接请求的。

2.重复如下几个步骤:

a. 调用socket的accept()方法来获得下面客户端的连接请求。通过accept()方法返回的socket实例,建立了一个和客户端的新连接。

b.通过这个返回的socket实例获取InputStream和OutputStream,可以通过这两个stream来分别读和写数据。

c.结束的时候调用socket实例的close()方法关闭socket连接。

客户端:

1.构建Socket实例,通过指定的远程服务器地址和端口来建立连接。

2.通过Socket实例包含的InputStream和OutputStream来进行数据的读写。

3.操作结束后调用socket实例的close方法,关闭。

UDP

Server端:

1. 构造DatagramSocket实例,指定本地端口。

2. 通过DatagramSocket实例的receive方法接收DatagramPacket.DatagramPacket中间就包含了通信的内容。

3. 通过DatagramSocket的send和receive方法来收和发DatagramPacket.

客户端:

1. 构造DatagramSocket实例。

2.通过DatagramSocket实例的send和receive方法发送DatagramPacket报文。

3.结束后,调用DatagramSocket的close方法关闭。

参考:

http://www.cnblogs.com/linzheng/archive/2011/01/23/1942328.html

http://sishuok.com/forum/blogPost/list/466.html

Java Socket 编程学习(5) TCP UDP总结相关推荐

  1. Linux下的socket编程学习(TCP)

    1.什么是socket? socket的英文翻译就是接口,插座的意思,很形象,就相当于将2台电脑用一根线连起来,线的两头插在不同的电脑上,借此实现通讯的功能. 两台电脑通信,实际上是这两台电脑上的某个 ...

  2. java网络编程,通过TCP,Socket实现多对一的局域网聊天室

    java网络编程,通过TCP,Socket实现多对一的局域网聊天室 可以实现多个客户端连接服务器,服务器接收到信息就会把信息广播到所有的客户端 这是服务器端的代码 View Code import j ...

  3. JAVA socket编程 Datagram套接字 UDP协议(转)

      查看文章     JAVA socket编程 Datagram套接字 UDP协议 2009-05-13 09:35 1 UDP套接字 数据报(Datagram)是网络层数据单元在介质上传输信息的一 ...

  4. tcp java实例_实现了基于TCP的Java Socket编程实例代码

    实现了基于TCP的Java Socket编程,功能很简单:客户端向服务器端输出一名话"connect",服务器端接收输出到控制台并向客户端输出一名话"Hello" ...

  5. Java Socket编程如何建立两者关系

    转自:http://developer.51cto.com/art/201003/190582.htm Java Socket编程需要大家详细的学习,有关的技术一直在不断的更新.那么要如何才能掌握好有 ...

  6. Java Socket编程----通信是这样炼成的

    转载自 Java Socket编程----通信是这样炼成的 Java最初是作为网络编程语言出现的,其对网络提供了高度的支持,使得客户端和服务器的沟通变成了现实,而在网络编程中,使用最多的就是Socke ...

  7. java socket编程心跳_Java Socket编程心跳包创建实例解析

    1.什么是心跳包? 心跳包就是在客户端和服务器间定时通知对方自己状态的一个自己定义的命令字,按照一定的时间间隔发送,类似于心跳,所以叫做心跳包. 用来判断对方(设备,进程或其它网元)是否正常运行,采用 ...

  8. Java网络编程学习——简单模拟在线聊天

    Java网络编程学习--简单模拟在线聊天 学了java网络,也是该做个小案例来巩固一下了. 本次案例将使用UDP和多线程模拟即时聊天,简单练练手. 1.前提知识 需要知道简单的IO流操作,以及简单的U ...

  9. socket编程学习(addr设置)

    sockaddr结构体 struct  sockaddr{ sa_family_t  sa_family; //地址族,最常用的是"AF_INET"(IPV4)和"AF_ ...

  10. Socket编程学习-基础操作

    Socket编程学习-基础操作 socket的基本操作 可参考,https://blog.csdn.net/sinat_36645384/article/details/79128137 核心问题1- ...

最新文章

  1. 让别人不知道你的网站使用PHP
  2. unity3d Update()和FixedUpdate()的区别
  3. NPAPI——实现非IE浏览器的类似ActiveX的本地程序(插件)调用
  4. C++默认构造函数的一点说明
  5. linux ubuntu ssh,Linux(Ubuntu)安装ssh服务
  6. 可变参数模板、右值引用带来的移动语义完美转发、lambda表达式的理解
  7. C++:39---继承中构造函数、析构函数的关系
  8. ThinkPHP6项目基操(3.控制器获取请求参数)
  9. kafka server常用核心配置
  10. “男友家里存款只有20万,我该和他结婚么?”数据告诉你多少家庭才能有20万的存款...
  11. 四个角不是直角的四边形_三个角为直角的四边形一定是矩形吗?
  12. Java架构师成长之道之计算机组成原理组成篇
  13. 2021-06-16volatile的三种特性
  14. c++ vs2015 播放音乐_三星s20都取消了耳机孔,1k-2k的播放器会成为直推党新选择吗?...
  15. 卡耐基梅隆大学(计算机学院排名),卡耐基梅隆大学计算机系统排名2020年
  16. 用Python批量修改图片名称及后缀名
  17. prometheus+alertmanager 企业微信告警
  18. 前端异步请求解决方案
  19. Java日期格式化字母含义
  20. 微信联盟链接不到服务器怎么,LOL微信绑定方法及无法登录处理方案推荐

热门文章

  1. 基于MATLAB的人眼开度疲劳检测识别
  2. 深度学习教程(2) | 神经网络基础(吴恩达·完整版)
  3. U盘数据恢复免费破解版哪里有?
  4. 用微PE安装KALI LINUX到U盘,【U盘安装kali】U盘 kali pe三合一教程!装机,存储
  5. python3调用arcpy地理加权回归_混合地理加权回归python实现代码
  6. 非负矩阵分解 java_matlab练习程序(非负矩阵分解)
  7. 增值税相关软件基本常识
  8. 大圆航线、恒向线绘制
  9. appuim + python 实现 趣头条 自动阅读
  10. Vue3+elementplus搭建通用管理系统实例七:通用表格实现上