热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

网络通信_Java网络通信Socket初探

篇首语:本文由编程笔记#小编为大家整理,主要介绍了Java网络通信-Socket初探相关的知识,希望对你有一定的参考价值。

篇首语:本文由编程笔记#小编为大家整理,主要介绍了Java网络通信-Socket初探相关的知识,希望对你有一定的参考价值。























在互联网时代,我们开发和使用的应用可能都成为网络延伸的一部分,这就要求我们对网络编程知识有些基本的了解。最初作为网络编程语言面世的Java,对网络编程提供了高度的支持。而在网络编程中Socket的使用最为广泛,比如我们熟知的即时通讯软件都使用了Socket相关技术。笔者在参与三剑客接口测试平台(http://sanjianke.corp.qihoo.net/)的开发中因为平台有对外提供服务的需要,解决用户内网与三剑客通信的问题而深挖了该技术,所以今天就给大家简单介绍socket在Java里面的使用和一些注意事项。















Java网络通信-Socket初探










什么是socket? 首先我们知道在网络四层模型中最上面两层分别是应用层和传输层,而我们可以把socket看作是在应用层和传输层之间的一个抽象层,它把TCP/IP层复杂的操作抽象为几个简单的接口供应用层调用。如下图所示:







Java网络通信-Socket初探










建立Socket的三要素: 协议,IP和端口。Java 对使用TCP还是UDP连接做了封装,分别使用Serversocket和DatagramSocket即可。建立一个socket连接的代码调用非常简单,如下分别为服务端和客户端的示例:







Java网络通信-Socket初探





上面的server端代码在执行第一行时就会尝试绑定并监听指定的端口号,如果该端口号已被其它应用使用就会返回错误。执行第二行的accept方法会一直阻塞,直到监听到有新的客户端连接,返回相应的socket句柄。无论是server还是client,在拿到socket句柄之后就可以进行一些读写操作,与操作文件读写类似,如:







Java网络通信-Socket初探










如何监听socket连接的状态? 使用socket对象提供的isConnected()方法获得的值总是true,即使实际上连接已经断开了,所以这个方法不能达到我们的目的。但是我们可以通过发心跳包的方式来监听连接是否正常。Java里面sokect对象可以使用sendUrgentData(int data)方法来发送一个字节的数据(int参数的低八位)。需要注意的是在接收心跳数据的一方(可以是server或者client)需要做如下设置:







Java网络通信-Socket初探





同时需要在接收端对发送过来的心跳数据做处理,一般是直接舍弃或忽略。













如何实现与多客户端之间的通信? 这个其实是用多线程技术能实现,大体的步骤如下:







Java网络通信-Socket初探










使用socket进行UDP通信。 我们知道与稳定可靠的TCP连接不同,UDP是无连接的、不可靠的、无序的,但是速度快。在用socket进行UDP编程时,需要用到两个主要的类: DatagramSocket 和 DatagramPacket, 后者用来创建数据包,大小限制在64K以内。具体可参考以下简单示例:







Java网络通信-Socket初探




Java网络通信-Socket初探










如各位读者所见,在Java中使用Socket通信并不复杂,简单几行代码就能完成连接的建立。但实际应用时我们还有一些值得注意的点,比如输入输出流的关闭,多线程数量和优先级的控制等等。





















Qtest之道



































推荐阅读
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 本文介绍了RPC框架Thrift的安装环境变量配置与第一个实例,讲解了RPC的概念以及如何解决跨语言、c++客户端、web服务端、远程调用等需求。Thrift开发方便上手快,性能和稳定性也不错,适合初学者学习和使用。 ... [详细]
  • 本文介绍了计算机网络的定义和通信流程,包括客户端编译文件、二进制转换、三层路由设备等。同时,还介绍了计算机网络中常用的关键词,如MAC地址和IP地址。 ... [详细]
  • 本文介绍了Python爬虫技术基础篇面向对象高级编程(中)中的多重继承概念。通过继承,子类可以扩展父类的功能。文章以动物类层次的设计为例,讨论了按照不同分类方式设计类层次的复杂性和多重继承的优势。最后给出了哺乳动物和鸟类的设计示例,以及能跑、能飞、宠物类和非宠物类的增加对类数量的影响。 ... [详细]
  • 本文讨论了在VMWARE5.1的虚拟服务器Windows Server 2008R2上安装oracle 10g客户端时出现的问题,并提供了解决方法。错误日志显示了异常访问违例,通过分析日志中的问题帧,找到了解决问题的线索。文章详细介绍了解决方法,帮助读者顺利安装oracle 10g客户端。 ... [详细]
  • centos安装Mysql的方法及步骤详解
    本文介绍了centos安装Mysql的两种方式:rpm方式和绿色方式安装,详细介绍了安装所需的软件包以及安装过程中的注意事项,包括检查是否安装成功的方法。通过本文,读者可以了解到在centos系统上如何正确安装Mysql。 ... [详细]
  • 本文介绍了网络编程的要点,包括InetAddress类获取IP地址的方法,IP地址的定义和表示方法,IPv4和IPv6的区别,以及网络通信协议中的端口和协议类型。 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • 利用Visual Basic开发SAP接口程序初探的方法与原理
    本文介绍了利用Visual Basic开发SAP接口程序的方法与原理,以及SAP R/3系统的特点和二次开发平台ABAP的使用。通过程序接口自动读取SAP R/3的数据表或视图,在外部进行处理和利用水晶报表等工具生成符合中国人习惯的报表样式。具体介绍了RFC调用的原理和模型,并强调本文主要不讨论SAP R/3函数的开发,而是针对使用SAP的公司的非ABAP开发人员提供了初步的接口程序开发指导。 ... [详细]
  • 本文介绍了在mac环境下使用nginx配置nodejs代理服务器的步骤,包括安装nginx、创建目录和文件、配置代理的域名和日志记录等。 ... [详细]
  • Java在运行已编译完成的类时,是通过java虚拟机来装载和执行的,java虚拟机通过操作系统命令JAVA_HOMEbinjava–option来启 ... [详细]
  • 本文分享了一位Android开发者多年来对于Android开发所需掌握的技能的笔记,包括架构师基础、高级UI开源框架、Android Framework开发、性能优化、音视频精编源码解析、Flutter学习进阶、微信小程序开发以及百大框架源码解读等方面的知识。文章强调了技术栈和布局的重要性,鼓励开发者做好学习规划和技术布局,以提升自己的竞争力和市场价值。 ... [详细]
  • 篇首语:本文由编程笔记#小编为大家整理,主要介绍了VoLTE端到端业务详解|VoLTE用户注册流程相关的知识,希望对你有一定的参考价值。书籍来源:艾怀丽 ... [详细]
author-avatar
微博网友_02887414
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有