热门标签 | 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之道



































推荐阅读
  • Java和JavaScript是什么关系?java跟javaScript都是编程语言,只是java跟javaScript没有什么太大关系,一个是脚本语言(前端语言),一个是面向对象 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 本文介绍了Python爬虫技术基础篇面向对象高级编程(中)中的多重继承概念。通过继承,子类可以扩展父类的功能。文章以动物类层次的设计为例,讨论了按照不同分类方式设计类层次的复杂性和多重继承的优势。最后给出了哺乳动物和鸟类的设计示例,以及能跑、能飞、宠物类和非宠物类的增加对类数量的影响。 ... [详细]
  • 本文介绍了操作系统的定义和功能,包括操作系统的本质、用户界面以及系统调用的分类。同时还介绍了进程和线程的区别,包括进程和线程的定义和作用。 ... [详细]
  • 本文介绍了网络编程的要点,包括InetAddress类获取IP地址的方法,IP地址的定义和表示方法,IPv4和IPv6的区别,以及网络通信协议中的端口和协议类型。 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • 本文介绍了为什么要使用多进程处理TCP服务端,多进程的好处包括可靠性高和处理大量数据时速度快。然而,多进程不能共享进程空间,因此有一些变量不能共享。文章还提供了使用多进程实现TCP服务端的代码,并对代码进行了详细注释。 ... [详细]
  • 本文介绍了计算机网络的定义和通信流程,包括客户端编译文件、二进制转换、三层路由设备等。同时,还介绍了计算机网络中常用的关键词,如MAC地址和IP地址。 ... [详细]
  • 本文介绍了如何清除Eclipse中SVN用户的设置。首先需要查看使用的SVN接口,然后根据接口类型找到相应的目录并删除相关文件。最后使用SVN更新或提交来应用更改。 ... [详细]
  • 预备知识可参考我整理的博客Windows编程之线程:https:www.cnblogs.comZhuSenlinp16662075.htmlWindows编程之线程同步:https ... [详细]
  • 本文讨论了在VMWARE5.1的虚拟服务器Windows Server 2008R2上安装oracle 10g客户端时出现的问题,并提供了解决方法。错误日志显示了异常访问违例,通过分析日志中的问题帧,找到了解决问题的线索。文章详细介绍了解决方法,帮助读者顺利安装oracle 10g客户端。 ... [详细]
  • centos安装Mysql的方法及步骤详解
    本文介绍了centos安装Mysql的两种方式:rpm方式和绿色方式安装,详细介绍了安装所需的软件包以及安装过程中的注意事项,包括检查是否安装成功的方法。通过本文,读者可以了解到在centos系统上如何正确安装Mysql。 ... [详细]
  • 一次上线事故,30岁+的程序员踩坑经验之谈
    本文主要介绍了一位30岁+的程序员在一次上线事故中踩坑的经验之谈。文章提到了在双十一活动期间,作为一个在线医疗项目,他们进行了优惠折扣活动的升级改造。然而,在上线前的最后一天,由于大量数据请求,导致部分接口出现问题。作者通过部署两台opentsdb来解决问题,但读数据的opentsdb仍然经常假死。作者只能查询最近24小时的数据。这次事故给他带来了很多教训和经验。 ... [详细]
  • ejava,刘聪dejava
    本文目录一览:1、什么是Java?2、java ... [详细]
  • POCOCLibraies属于功能广泛、轻量级别的开源框架库,它拥有媲美Boost库的功能以及较小的体积广泛应用在物联网平台、工业自动化等领域。POCOCLibrai ... [详细]
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社区 版权所有