`
mfcai
  • 浏览: 404753 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Java网络编程的一些概念

阅读更多
1、什么是短连接
   连接->传输数据->关闭连接
   短连接是指SOCKET连接后发送后接收完数据后马上断开连接。
   短连接比较典型的例子就是http。 HTTP是无状态的,浏览器和服务器每进行一次HTTP操作,就建立一次连接,但任务结束就中断连接。
2、什么是长连接
连接->传输数据->保持连接 -> 传输数据-> 。。。 ->关闭连接。
长连接指建立SOCKET连接后不管是否使用都保持连接,但安全性较差。
之所以出现粘包和半包现象,是因为TCP当中,只有流的概念,没有包的概念.
3、半包
指接受方没有接受到一个完整的包,只接受了部分,这种情况主要是由于TCP为提高传输效率,将一个包分配的足够大,导致接受方并不能一次接受完。(在长连接和短连接中都会出现)。
4、粘包与分包
指发送方发送的若干包数据到接收方接收时粘成一包,从接收缓冲区看,后一包数据的头紧接着前一包数据的尾。出现粘包现象的原因是多方面的,它既可能由发送方造成,也可能由接收方造成。
1)发送方引起的粘包是由TCP协议本身造成的,TCP为提高传输效率,发送方往往要收集到足够多的数据后才发送一包数据。若连续几次发送的数据都很少,通常TCP会根据优化算法把这些数据合成一包后一次发送出去,这样接收方就收到了粘包数据。
2)接收方引起的粘包是由于接收方用户进程不及时接收数据,从而导致粘包现象。这是因为接收方先把收到的数据放在系统接收缓冲区,用户进程从该缓冲区取数据,若下一包数据到达时前一包数据尚未被用户进程取走,则下一包数据放到系统接收缓冲区时就接到前一包数据之后,而用户进程根据预先设定的缓冲区大小从系统接收缓冲区取数据,这样就一次取到了多包数据。分包是指在出现粘包的时候我们的接收方要进行分包处理。(在长连接中都会出现)
5、通信长度
实际应该根据需求和网络状况来决定。对于TCP,这个长度可以大点,Socket内部默认的收发缓冲区大小大概是8K。但对于UDP,就不要太大,一般在1024至10K。注意一点,无论发多大的包,IP层和链路层都会把你的包进行分片发送,一般局域网就是1500左右,广域网就只有几十字节。分片后的包将经过不同的路由到达接收方,对于UDP而言,要是其中一个分片丢失,那么接收方的IP层将把整个发送包丢弃,这就形成丢包。显然,要是一个UDP发包佷大,它被分片后,链路层丢失分片的几率就佷大,你这个UDP包,就佷容易丢失,但是太小又影响效率。最好可以配置这个值,以根据不同的环境来调整到最佳状态。
6、关于发送
明确一点,TCP作为流,发包是不会整包到达的,而是源源不断的到,那接收方就必须组包。而UDP作为消息或数据报,它一定是整包到达接收方。
7、关于接收
一般的发包都有包边界,首要的就是你这个包的长度要让接收方知道,于是就有个包头信息,对于TCP,接收方先收这个包头信息,然后再收包数据。一次收齐整个包也可以,可要对结果是否收齐进行验证。
这也就完成了组包过程。UDP,那你只能整包接收了。要是你提供的接收Buffer过小,TCP将返回实际接收的长度,余下的还可以收,而UDP不同的是,余下的数据被丢弃。
注意TCP,提供的Buffer佷大,那么可能收到的就是多个发包,必须分离它们;还有就是当Buffer太小,而一次收不完Socket内部的数据,那么Socket接收事件,可能不会再触发,使用事件方式进行接收时,密切注意这点。这些特性就是体现了流和数据包的区别。
8、问题
问题描述:在并发量比较大的情况下,就会出现一次接受并不能完整的获取所有的数据。
处理方式:
1)通过包头+包长+包体的协议形式,当服务器端获取到指定的包长时才说明获取完整。
2)指定包的结束标识,这样当我们获取到指定的标识时,说明包获取完整。
问题描述:什么时候需要考虑粘包的情况?
1)当时短连接的情况下,不用考虑粘包的情况
2)如果发送数据无结构,如文件传输,这样发送方只管发送,接收方只管接收存储就ok,也不用考虑粘包
3)如果双方建立连接,需要在连接后一段时间内发送不同结构数据需要考虑粘包
注:粘包情况有两种,一种是粘在一起的包都是完整的数据包,另一种情况是粘在一起的包有不完整的包


备注:
一个包没有固定长度,以太网限制在46-1500字节,1500就是以太网的MTU,超过这个量,TCP会为IP数据报设置偏移量进行分片传输,现在一般可允许应用层设置8k(NTFS系)的缓冲区,8k的数据由底层分片传输

本文欢迎转载,转载请注明出处与作者

出处:http://blog.sina.com.cn/staratsky

作者:流星
0
2
分享到:
评论

相关推荐

    Java网络编程(概念+实例)

    Java网络编程(概念+实例) 针对Socket 编程、ServerSocket 类的方法、Socket 类的方法等进行了介绍 针对网络编程进行了实例展示

    入门Java网络编程

    java是伴随网络而兴起的语言,学习java的网络编程尤为重要。国内讲解java网络编程的优秀书籍不多。这本是国外的优秀书籍,讲了各种网络编程,以及io,泛型,集合等概念。最后还讲解了网络编程的一些成熟框架。

    java网络编程第四版pdf

    java网络编程第四版PDF,带目录和书签。 第一章 基本网络概念 第二章 流 第三章 线程 ...

    java网络编程英文高清完整第四版.pdf下载

    前几天看到公司一个大神看技术文档,打眼瞟了一下,全是英文的表示直接看看不到。但是大神不一样,人家是硕士哦,英文杠杠的,但是自己心里也想看...java网络编程第四版 java_concurrency_in_practice.pdf Java并发实践

    JAVA课件网络编程概念

    网络编程基础教程,主要介绍网络编程的基本概念,JAVA类

    java并发编程从入门到精通

    《Java并发编程从入门到精通》内容包括并发编程概念,线程,线程安全,线程集合类,线程阀,线程池,Fork/Join,线程、线程池在互联网项目开发的应用,线程监控及线程分析,Android中线程应用。 本书适合Java开发...

    并发思维导图Java并发编程的相关概念和知识

    "Java并发思维导图" 这句话表明了一个中心主题,即Java并发编程的相关概念和知识。以下是对这句话的扩充: Java并发编程是Java编程中的一个重要领域,它涉及到多个线程之间的协作和竞争。在Java中,并发编程可以...

    第13章-Java网络编程-Java面向对象程序设计教程-微课视频版-程杰-清华大学出版社.pptx

    Socket的概念 第13章-Java网络编程-Java面向对象程序设计教程-微课视频版-程杰-清华大学出版社全文共17页,当前为第8页。 端口号是用一个16位的整数来表达的,其范围为0~65535,其中0~1023为系统所保留。 Socket...

    java网络编程.doc

    java的基本概念以及java网络编程初级入门,还有例子和代码

    JAVA语言网络编程概念基础

    关于网络编程的基础课件!有兴趣的,会有所帮助!

    Java编程语言详细教程

    ◇8.3 基于Socket的低层次Java网络编程 ◇本讲小结 ◇课后习题 ★ 第九讲 JavaBean和RMI ◇课前索引 ◇9.1 JavaBean的基本概念 ◇9.2 JavaBean开发简介 ◇9.3 RMI的基本概念和编程简介 ◇9.4 EJB简介 ◇本...

    java 网络编程从入门到精通

    java 网络编程从入门到精通 想学习网络编程的各位,可以看这本书,从基础概念讲起,一直到高级应用。 包含例子。

    Java网络编程技术 JAVA

    本章将介绍Java网络方面的基础概念。然后介绍编写连接网络的Java程序。最后,我们还将介绍如何访问Internet上的信息。

    java学习课件,网络编程语言

    绝好的Java学习资料。...第三章 面向对象编程的基本概念; 第四章 java 中的对象、类、包和接口; 第五章 异常处理; 第六章 编写文本应用程序; 第七章 线程; 第八章 java的输入输出 ............... 等等

    Java网络编程(第三版)中文版.part09.rar

    Java网络编程(第三版)中文版(不看后悔) JAVA Network Programming,Third Edition 原出版社: O'Reilly 作者: (美)Elliotte Rusty Harold [作译者介绍] 译者: 朱涛江[同译者作品] 林剑 丛书名: O'...

    java网络编程与分布式计算

    java网络编程与分布式这本书不错 分布式编程里面需要的概念与实例都有

    java经典面试题目-面经-java-Java语言的进阶概念-常用的库和框架-并发编程-网络编程-Web开发-面经

    什么是Java中的面向对象编程(OOP)?列举OOP的原则。 什么是Java中的重载和重写?它们之间有什么区别? 什么是Java中的静态方法和实例方法?它们之间有什么区别? Java中如何实现字符串的连接? 什么是Java中的...

    【十五】Java网络编程(能实现计算机自娱自乐的网络编程)

    思维导图参考:【十五】Java网络编程思维导图 一、什么是网络 网络的概念 由点和线构成,表示诸多对象间的相互联系 比如: 蜘蛛网 人脉网 计算机网络 二、计算机网络 为实现资源共享和信息传递,用过通信线路连接...

    JAVA编程技术

    主要阐述了Java语言的关键字、语句、语法规则、类库等的使用方法,其内容主要包括Java语言开发工具的介绍、面向对象编程的概念、Java基础语句、Java类、类的继承与多态等特性、接口、包、异常、Java基础类库的应用,...

    Java网络编程(第三版)中文版.part11.rar

    Java网络编程(第三版)中文版(不看后悔) JAVA Network Programming,Third Edition 原出版社: O'Reilly 作者: (美)Elliotte Rusty Harold [作译者介绍] 译者: 朱涛江[同译者作品] 林剑 丛书名: O'...

Global site tag (gtag.js) - Google Analytics