初识Java网络编程

  事实上网络编程简单的理解就是两台计算机相互通讯数据而已,对于程序员而言,去掌握一种编程接口并使用一种编程模型相对就会显得简单的多了,Java SDK提供一些相对简单的Api来完成这些工作。Socket就是其中之一,对于Java而言,这些Api存在与java.net 这个包里面,因此只要导入这个包就可以准备网络编程了。

  目前较为流行的网络编程模型是客户机/服务器(C/S)结构。即通信双方一方作为服务器等待客户提出请求并予以响应。客户则在需要服务时向服务器提出申请。服务器一般作为守护进程始终运行,监听网络端口,一旦有客户请求,就会启动一个服务进程来响应该客户,同时自己继续监听服务端口,使后来的客户也能及时得到服务。

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

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

  总之,TCP在网络通信上有极强的生命力,例如远程连接(Telnet)和文件传输(FTP)都需要不定长度的数据被可靠地传输。相比之下UDP操作简单,而且仅需要较少的监护,因此通常用于局域网高可靠性的分散系统中client/server应用程序。

  Socket是TCP/IP协议的一个十分流行的编程界面,一个Socket由一个IP地址和一个端口号唯一确定。Socket套接字是Java网络编程基础,几乎所有网络传输都是通过套接字来完成的。对于Java而言已经简化了Socket的编程接口。首先我们来讨论有关提供固定位置的服务方是如何建立的。Java提供了ServerSocket来对其进行支持.事实上当你创建该类的一个实力对象并提供一个端口资源你就建立了一个固定位置可以让其他计算机来访问你,ServerSocket server=new ServerSocket(6789);这里稍微要注意的是端口的分配必须是唯一的。因为端口是为了唯一标识每台计算机唯一服务的,另外端口号是从0~65535之间的,前1024个端口已经被Tcp/Ip 作为保留端口,因此你所分配的端口只能是1024个之后的。Java同样提供了一个Socket对象来对其进行支持,只要客户方创建一个Socket的实例对象进行支持就可以了。Socket client=new Socket(InetAddress.getLocalHost(),5678);客户机必须知道有关服务器的IP地址,对于着一点Java也提供了一个相关的类InetAddress 该对象的实例必须通过它的静态方法来提供,它的静态方法主要提供了得到本机IP 和通过名字或IP直接得到InetAddress的方法。

  java在包java.net中提供了两个类Socket和ServerSocket,分别用来表示双向连接的客户端和服务端。在创建socket时如果发生错误,将产生IOException,在程序中必须对之作出处理。所以在创建Socket或ServerSocket是必须捕获或抛出例外。

  包java.net中提供了两个类DatagramSocket和DatagramPacket用来支持数据报通信,DatagramSocket用于在程序之间建立传送数据报的通信连接, DatagramPacket则用来表示一个数据报。

  用数据报方式编写client/server程序时,无论在客户方还是服务方,首先都要建立一个DatagramSocket对象,用来接收或发送数据报,然后使用DatagramPacket类对象作为传输数据的载体。

  关于网络编程的一些知识并不是java语 言所特有的,是每一种网络编程语言所共有的,因此学好网络编程的基本原理,对于以后不管用什么语言来进行网络编程的开发,都是很有帮助的,因此在这一章节 中我觉得应该尽量的多进行一些实战的演练,也许等真正的开发出一个网络应用程序时,很有成就感。因此,多进行相关功能的练习,包括TCP,UDP。另外还要额外学习一些相关的术语和概念,比如:socket套接字,TCP,UDP,以及它们之间的区别。总之,这一章的任务比较少,但是这一章的知识是非常重要的,不容忽视。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏linux驱动个人学习

CPUFreq驱动

CPUFreq子系统位于 drivers/cpufreq目录下,负责进行运行过程中CPU频率和电压的动态调整,即DvFS( Dynamic Voltage Fr...

15930

Cassandra的数据布局 - 调试SSTables

当您事先知道数据的格式并且可以基于过往的经验做决策时,使用Apache Cassandra处理大规模的该类型的数据是非常容易的。

81700
来自专栏信安之路

常见端口及安全测试

在渗透测试中,端口扫描是一个非常重要的环节,端口扫描的目的是了解服务器上运行的服务信息,针对不同的端口进行不同的安全测试,本文的主要内容是关于常见端口安全隐患以...

26200
来自专栏大内老A

并发与实例上下文模式: WCF服务在不同实例上下文模式下具有怎样的并发表现

通过《上篇》介绍,我们知道了如何通过编程和配置的方式设置相应的最大并发量,从而指导WCF的限流体系按照你设定的值对并发的服务调用请求进行限流控制。那么,在WCF...

19460
来自专栏大内老A

控制并发访问的三道屏障: WCF限流(Throttling)体系探秘[下篇]

通过《上篇》介绍,我们知道了如何通过编程和配置的方式设置相应的最大并发量,从而指导WCF的限流体系按照你设定的值对并发的服务调用请求进行限流控制。那么,在WCF...

22650
来自专栏嵌入式程序猿

一步步学习MQX实时操作系统(2)

上次简单介绍了MQX的一些背景和知识,今天我们来学习以IAR为开发环境,以kv4x系列控制器为平台,学习分析例程,搭建SDK+MQX开发环境。 准备工...

29360
来自专栏杨建荣的学习笔记

一则数据库无法重启的案例分析(r8笔记第96天)

今天一个开发的同事找到我,说有个问题想咨询一下我,突然想起他昨天让我帮他处理一个工单,他这么一问我才想起来还没做,结果他说是另外一件事,说有个开 发测试的环境,...

37760
来自专栏后台技术

golang定位内存泄露与cpu占用过高的方法与实战

现在使用golang的项目越来越多,但是当golang发生内存泄露或cpu占用过高时,怎么定位呢?其实很简单,按如下所述步骤操作即可:

5.8K50
来自专栏大内老A

ConcurrencyMode.Multiple模式下的WCF服务就一定是并发执行的吗:探讨同步上下文对并发的影响[上篇]

通过《上篇》介绍,我们知道了如何通过编程和配置的方式设置相应的最大并发量,从而指导WCF的限流体系按照你设定的值对并发的服务调用请求进行限流控制。那么,在WCF...

21680
来自专栏编程直播室

魅族手机调试和VID一、 现象:二、 原因三、 解决方法:四、 其它手机类似问题处理:五、科普VID:

29330

扫码关注云+社区

领取腾讯云代金券