以Java为例的网络通信

来源 :电脑迷·中旬刊 | 被引量 : 0次 | 上传用户:tiger0092009
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  摘要:如今,TCP/IP已经成为计算机网络协议事实上的标准,而Java凭借其跨平台的特性以及和对网络编程的强大支持能力,在网络应用中已经占据了主导地位。本文以Java为例介绍了两种网络通信的方式。
  关键词:java;网络通信;socket
  1 Socket套接字
  计算机之间的通信在本质上其实是计算机内中运行的进程之间的通信,全球那么多的计算机,还有计算机中运行的那么的多进程是怎么彼此找到对方从而进行通信的呢?我们需要引入IP地址,端口号两个概念。
  1.1IP地址
  整个的因特网是一个单一的,抽象的网络。IP地址就是给连接在因特网上的每一个主机或者路由器的每一个接口分配一个在全世界内唯一的标识符号。标识符以32位二进制或者与其对应的十进制数表示。这样就可以很方便的找到连接在因特网上的任何一台计算机。
  1.2端口号
  在单个计算机中运行的进程是用进程号来标志的。但是在网络环境下,用进程号来标志某一个进程是不行的。因为连接在因特网上的计算机种类有很多,不同种类的计算机对于某一个具体进程分配的进程号可能会不同,这就会让通信变得困难起来。所以引进了一个叫做端口号的16位二进制数来区别在计算机内运行的不同进程。需要说明在不同的计算机中相同端口号是没有关联的。
  1.3套接字
  有了IP地址和端口号,就可以区别不同主机中的不同进程了。在通信时只需把数据报交给目的主机的某一个端口,剩下的工作就只需要网络中制定的协议来完成就可以了。那么某一台计算机中的某个进程就可以用以下形式表示:
  Socket = (IP地址,端口号)
  我们称之为套接字。
  2 UDP通信
  UDP提供的是一种无连接,尽最大努力交付的通信方式。发送数据之前不需要建立连接从而减少了时延,发送数据时不需要确定数据是否到达对方,因此实现简单。发送接收如下:
  DatagramSocket udpSocket =
  new DatagramSocket(10002);
  byte buff[] = new byte[1024];buff = message.getBytes();
  DatagramPacket packet = new DatagramPacket(buff, buff.length, ip, port);
  udpSocket.send(packet);
  在发送之前我们需要指明发送方的端口号,然后直接把需要发送的消息放入数据包packet中并指明需要发送给哪一台机器的哪一个端口之后调用send方法就是发送消息了。
  udpSocket.receive(packet);
  String message = new String(packet.getData(), 0, packet.getLength());
  只需要通过DatagramSocket类提供的receive方法把接收到的数据放在一个新的数据包中就可以接受消息了。
  UDP因为实现简单所以运用的比较广泛,例如做一个直播软件时我们只需要每秒发送24張图片给每一个用户就可以了,不需要提供可靠的传输。
  3 TCP通信
  与UDP相比TCP就要复杂的多了,TCP提供的是一种面向连接的,可靠的通信方式。可以保证数据在传递的时候不丢失,并且按顺序到达。TCP在发送消息之前需要进行“三次握手”来商量确定通信双方需要的参数,在释放连接的时候需要进行“四次挥手”来保证数据完全传送到对方。TCP只提供一对一通信,发送方被成为Client接收方被称为Servers,代码如下:
  3.1Client客户端
  Socket tcpSocket = new
  Socket(ip,SERVERSPORT);String message = “hi!”;
  DataOutputStream dos = new
  DataOutputStream(tcpSocket.getOutputStream());
  dos.writeUTF(message); dos.flush();
  使用tcp发送消息时需要用到套接字Socket,需要指明服务器的地址。套接字相当于将通信双方用一个管道连接起来,发送的消息通过管道可以按照顺序的,完好无损的被传送到对方。
  3.2Servers服务器端
  ServerSocket localScoket = new
  ServerSocket(LOCALTCPPORT);
  Socket socket = null; socket =
  localScoket.accept();
  DataInputStream dis = new DataInputStream(socket.getInputStream());
  String message = dis.readUTF();
  对于服务器端来说localScoket相当于本地的端口号,通过accept方法去监听是否有客户端连接到服务器。如果有客户端连接,则把客户端的Socket保存下来用于通信,如果没有程序一直会阻塞在accept方法这里,直到有客户端连接。
  4 结束语
  这里只介绍了两种一对一的通信方式,在网络中消息的传播不只是一对一,还有一对多和多对多。UDP支持一对一,一对多,多对多的通信。TCP只支持一对一的通信,但这并不代表我们不能使用TCP进行一对多的通信。对于一对多的通信我们可以使用多播组的方法(基于UDP)把每个主机都加入到多播组中实现。也可以把服务器作为一个中转站,把使用TCP连接到主机的客户端给保存下来,再把接受到的消息转发给连接到服务器的各个客户机。对于TCP和UDP没有好坏之分,主要要看它们的用途,如果数据发送的正确率并不是那么的重要,比如聊天,直播这类的软件我们可以使用简单的UDP。如果数据发送的正确率很重要我们要使用提供可靠传输的TCP,比如文件传输等。
  参考文献:
  [1]姚晓芳,舒小松.基于Java Socket网络编程的基础性应用研究[J].无线互联科技,2017.
  [2]舒小松.基于Java网络编程中组播技术的应用技术的应用和与研究[J].无线互联科技,2018
  作者简介:毕龙阁(1997—) 男,汉族,河南洛阳,河南大学软件学院,2015级本科生,专业:软件工程。
其他文献
20世纪70年代以来,世界经济一体化和金融全球化己成为一种不可逆转的趋势。随着我国银行业的全面开放,外资银行对我国银行业的影响,如何应对外资竞争,提高自身综合效率问题一
学位
本文介绍了一种采用ARM(AT91RM9200)与SH(SH7316)双芯片组成的多媒体手机设计方案,提供了手机丰富的多媒体功能,极大的提高了手机的开发速度。首先给出了系统的硬件整体架构
该文从挂篮荷载计算、施工流程、支座及临时固结施工、挂篮安装及试验、合拢段施工、模板制作安装、钢筋安装、混凝土的浇筑及养生、测量监控等方面人手,介绍了S226海滨大桥
本文对中国近代以前传统社会的制度进行分析,基于诺斯的制度及制度变迁理论对李约瑟之谜进行解释。不同于诺斯将制度分为正式制度和非正式制度两个部分,本文将制度分为经济制
该文从挂篮荷载计算、施工流程、支座及临时固结施工、挂篮安装及试验、合拢段施工、模板制作安装、钢筋安装、混凝土的浇筑及养生、测量监控等方面人手,介绍了S226海滨大桥
期刊
本文通过对荣华二采区10
期刊
高职院校是以培养技术技能人才为目标的,实践教学尤为重要,高职院校的实验室能够为师生提供实践教学所需的实验与实训场所与设备,并在此基础上通过课程设计将实训操作与日常
该文从挂篮荷载计算、施工流程、支座及临时固结施工、挂篮安装及试验、合拢段施工、模板制作安装、钢筋安装、混凝土的浇筑及养生、测量监控等方面人手,介绍了S226海滨大桥
公司是现代经济社会中不可或缺的重要一员,极大地推动市场经济和社会的发展,因此如何科学合理地对公司的财务绩效进行评价,已成为公司财务研究领域的重要问题。本文在系统地分析
Newland 等报告大剂量 IgG 静脉注射对成人急性或慢性自身免疫性血小板减少症,可引起血小板迅速升高。他们发现在输注 IgG前后,密切配合脾切除术,特别是在发病后16周内输注