浅谈以java为基础的Socket通信简介及实现

2017-04-20 18:34陶艳芳
青春岁月 2017年5期

【摘要】我们都知道现在通过各种网络工具可以实现数据之间的交流,但是,却很少有人去理解实现的原理,本论文就通过使用java语言,自己来编写程序,实现计算机中数据的交流,通过阅读本论文,你会了解到什么是Socket,什么是端口号,如何使用java来实现一个Socket通信。相信本论文一定会为你在编程领域有所帮助。

【关键词】Socket;端口号;java

一、引言

要想自己动手实现Socket编程,我们首先要知道什么是Socket,在此之前,我们就不得不提到TCP协议,这里我们不要把TCP看得多么高大上,我们只要知道,数据如果想要在网络中进行传输,那么就必须要遵守这个协议,就像你要成为中华人民共和国的公民,你首先就必须有国家承认的身份证一样,这样我们才能动手做其他事情。有了TCP协议为基础,那我们就可以通过java语言中提供的类来实现Socket编程。

二、java中需要使用到的类

java是一门面向对象的语言,所谓面向对象,只是我们编程的一种思想,在java语言没有诞生之前,我们使用到的面向过程的编程方式,面向过程就是我们在编程中需要到什么,那就创造出来,就像你要去银行取钱,你要坐车去,那么你就要创造出一辆车,你要使用ATM机,那么就要创造出一台ATM机。而使用面向对象的方式,就是你需要的各种东西之前就给你创造好了,你要取钱,你只要输入密码和余额就是了。而java中提供了类的概念,就想人类,就是一个java中的类,而毛主席就是人类的一个个体,在java中我们称毛主席就是人类的一个对象。对于Socket编程而言,java中也提供了相应的类,我们只要熟练使用那些类,就能够实现本论文的目标。

在java中,以及提供了客户端的Socket类,而服务器端,有ServerSocket类,通过其中的各种属性和方法,以及在java中常用的输入流和输出流等相关只是,我们就能简单的实现Soket编程。

三、Soket通信模型

现在,我们有了TCP协议为基础,有了java语言作为媒介,那么就可以开始去理解Soket通信模型。首先,我们需要建立服务器端Server,创建一个客户端Client,然后在Server端的指定端口进行监听,所谓的端口,就好像是门牌号一样,客户端可以通过ip地址找到对应的服务器端,但是服务器端是有很多端口的,每个应用程序对应一个端口号,通过类似门牌号的端口号,客户端才能真正的访问到该服务器。当Client客户端创建了socket向服务器端发送请求后,服务器端会接收到客户端的请求,并创建一个连接的Socket来与客户端通信。而具体的通信,java中提供了输入流和输出流的概念。从而实现数据的交互。通信结束后,我们需要在客户端和服务器端都关闭Socket和相应资源,这样一个Socket通信就完成了。

四、Socket通信实现步骤

1、服务器端创建ServerSocket对象,ServerSocket server=new ServerSocket(8888);绑定监听的端口,如上表示的就是监听了8888端口,然后通过server对象的accept()方法监听客户端请求,此时服务器端就实现了对客户端的连接,通过建立连接后,可以使用字符流来接收客户端发送过来的数据,InputStream iStream=socket.getInputStream()其中的iStream对象中就保存了这些数据,当然,此时我们还可以通过InputStreamReader 和BufferReader等来包装输入流,然后通过while循环来将其中的数据读取并处理相关的业务逻辑,最后关闭相应的资源。

2、客户端要创建Socket对象,Socket socketCli=new Socket("127.0.0.1",8888);这里是用的是Socket类,其中包装了各种客户端需要使用到的方法,该类的构造函数中有两个参数,其中第一个参数数服务器的IP地址,这里写的127.0.0.1,表示的是服务器地址为本机,如果你要连接的服务器是远程服务器,那么你就需要写上你要连接的服务器的地址,而第二个参数表示的是要连接该服务器上的哪个端口号,这里的端口号必须和服务器端打开的端口号相同,如果不同,那么则无法实现数据的发送和接收,有了Socket示例对象后,我们需要在客户端创建输出流来向服务器端输出数据,scoketCli中有getOutputStream()的方法来获取输出流,OutputStream oStream=socketCli.getOutputStream(),同理,如果我们的服务器会承受比较大的压力的时候,我们可以使用PrintWriter来包装该输出流,PrintWriter writer=new PrintWriter(oStream),最后通过writer对象的write方法来将要发送的数据发送出去,这样服務器端才能接收到客户端发送的数据,值得注意的是,无论是服务器端还是客户端,我们都必须是关闭相关的资源,因为如果没有及时的关闭,服务器可能会出现莫名其妙的错误。

在编写好代码后,我们需要注意几点,因为这是服务端和客户端的交互,所以首先我们在运行的时候必须先开启服务器端,就像你取钱的时候,肯定是要先有银行的,当然,运行服务器的时候,端口号如果被占用的话,系统会提示端口被占用的信息,此时你需要使用一个另外的端口号,而客户端中,上面的代码因为使用的是本机,所以IP地址设置为127.0.0.1,如果你是连接其他电脑,那么只需要将该IP地址修改即可。

五、结论

从上面的代码我们可以得到下面的结论,在我们开启服务端,并监听了指定的端口,那么如果有客户端连接,通过java的各种手段,服务器端就可以获取到客户端发送过来的数据,从中我们也应该知道了所谓的TCP和IP以及端口号的使用,很多东西也许看上去生涩难懂,但是只要我们实际的动手去操作了,特别是编程,那么就会很容易的去理解。当然,上面只是一个很小的例子,实际的开发中会更加的困难,但是只要我们掌握了基本的知识点,那么就可以在实际的开发中一点一点的去学习,从而达到更高的一个水平。

【作者简介】

陶艳芳(1994—),女,汉族,湖南人,邵阳学院魏源国际学院2013级通信工程专业在读。