Java 网络通信-基本概括

一.网络通信的2种方式

  1.TCP(传输控制协议)方式

   TCP方式就类似于拨打电话,使用该种方式进行网络通讯时,需要建立专门的虚拟连接,然后进行可靠的数据传输,如果数据发送失败,则客户端会自动重发该数据

  2.UDP(用户数据报协议)方式

  UDP方式就类似于发送短信,使用这种方式进行网络通讯时,不需要建立专门的虚拟连接,传输也不是很可靠,如果发送失败则客户端无法获得

  3.对比

  重要数据一般是通过TCP协议进行数据传输的,因为TCP需要建立专用的虚拟连接以及确认传输是否正确,所以使用TCP方式的速度要稍微慢一些。

   使用UDP时,每个数据报中都给出了完整的地址信息,因此无需要建立发送方和接收方的连接。 

–对于TCP协议,由于它是一个面向连接的协议,在socket之间进行数据传输之前必然要建立连接,所以在TCP中多了一个连接建立的时间 

–使用UDP传输数据时是有大小限制的,每个被传输的数据报必须限定在64KB之内。 

–TCP没有这方面的限制,一旦连接建立起来,双方的socket就可以按统一的格式传输大量的数据。 

–UDP是一个不可靠的协议,发送方所发送的数据报并不一定以相同的次序到达接收方。 

–TCP是一个可靠的协议,它确保接收方完全正确地获取发送方所发送的全部数据 

-TCP在网络通信上有极强的生命力,例如远程连接(Telnet)和文件传输(FTP)都需要不定长度的数据被可靠地传输。 

—相比之下UDP操作简单,而且仅需要较少的监护,因此通常用于局域网高可靠性的分散系统中client/server应用程序 

二.URL

1.创建URL

注意协议即可。public URL(String protocol, String host, String file);  

2.解析URL

各种get方法。

3.从URL读取WWW网络资源

这样可以读取html文件。

三.网络编程

按照前面的基础知识介绍,无论使用TCP方式还是UDP方式进行网络通讯,网络编程都是由客户端服务器端组成

3.1客户端网络编程步骤

客户端client指首先发起连接的程序,一般实现程序界面和基本逻辑实现。

1.建立网络连接:指定连接到的服务器的IP地址和端口号,完成后,会建立一条虚拟的连接,后续操作就可以通过该虚拟连接实现数据交换。

2.交换数据:交换数据严格按照请求响应模型进行,由客户端发送一个请求数据到服务器,如果客户端不发送请求则服务器端就不响应。

3.关闭网络连接:数据交换完成以后,关闭网络连接,释放和程序所占用的端口、内存等系统资源。

3.2服务器端网络编程步骤

服务器端Server是指在网络编程中被动等待连接的程序。一般实现程序的核心逻辑及数据存储等核心功能。

1.监听端口:服务器端启动后,不需要发起连接,只需要舰艇某个发放给客户端的端口,服务器程序运行的本地计算机的IP地址就是服务器程序的IP地址。

2.获取连接:当客户端连接到服务器时,服务器端就可以获得一个链接,这个连接包含客户端的信息。

3.数据交换:先接受客户端发来的数据,进行处理后发送回客户端。

4.关闭连接

四。基础网络类InetAddress

工厂方法(factory method)仅是一个类中静态方法返回一个该类实例的约定。对于InetAddress,三个方法 getLocalHost( )、getByName( )以及getAllByName( )可以用来创建InetAddress的实例 

•如果这些方法不能解析主机名,它们引发一个UnknownHostException异常。 

域名、IP、URL的联系

域名是个文字形式记录的IP地址 IP地址是计算机在网络中的门牌号!
URL是网页地址

打个比方 http://zhidao.baidu.com/question/14674128.html 是URL
zhidao.baidu.com 就是域名
220.181.18.110 就是IP地址
你通过录入URL http://zhidao.baidu.com/question/14674128.html让浏览器知道你要访问zhidao.baidu.com(域名)电脑就会把zhidao.baidu.com(域名)解析成220.181.18.110(ip地址)然后和220.181.18.110建立连接告诉220.181.18.110 我要看zhidao.baidu.com/question/14674128.html (URL)

五.TCP编程

java.net.Socket类代表客户端连接

java.net.ServerSocket类代表服务器端连接

在进行网络编程时,底层网络通讯的细节已经实现了比较高的封装,所以在程序员实际编程时,只需要指定IP地址和端口号码就可以建立连接了。

客户端

1) 建立Socket连接 

Socket socket2 = new Socket(“www.sohu.com”,80);

2)按照“请求-响应”模型进行网络数据交换

在Java语言中,数据传输功能由Java IO实现,也就是说只需要从连接中获得输入流和输出流即可,然后将需要发送的数据写入连接对象的输出流中,在发送完成以后从输入流中读取数据即可。示例代码如下:

 OutputStream os = socket1.getOutputStream(); //获得输出流

 InputStream is = socket1.getInputStream();     //获得输入流

这里获得的只是最基本的输出流和输入流对象,还可以根据前面学习到的IO知识,使用流的嵌套将这些获得到的基本流对象转换成需要的装饰流对象,从而方便数据的操作。

3)关闭网络连接

 socket1.close();

服务器端

首先需要说明的是,客户端的步骤和服务器端的编写步骤不同,所以在学习服务器端编程时注意不要和客户端混淆起来。

1)监听端口

ServerSocket ss = new ServerSocket(10000);

2)获得连接

当有客户端连接到达时,建立一个和客户端连接对应的Socket连 接对象,从而释放客户端连接对于服务器端端口的占用

Socket socket = ss.accept();

该代码实现的功能是获得当前连接到服务器端的客户端连接。需要说明的是accept和前面IO部分介绍的read方法一样,都是一个阻塞方法,也就是当无连接时,该方法将阻塞程序的执行,直到连接到达时才执行该行代码。另外获得的连接会在服务器端的该端口注册,这样以后就可以通过在服务器端的注册信息直接通信,而注册以后服务器端的端口就被释放出来,又可以继续接受其它的连接了。

3)按照“请求-响应”模型进行网络数据交换

这里获得的Socket类型的连接就和客户端的网络连接一样了,只是服务器端需要首先读取发送过来的数据,然后进行逻辑处理以后再发送给客户端,也就是交换数据的顺序和客户端交换数据的步骤刚好相反

 InputStream is = ss.getInputStream();     //获得输入流

OutputStream os = ss.getOutputStream(); //获得输出流

4)关闭服务器端连接

ss.close();

猜你喜欢

转载自blog.csdn.net/weixin_38967434/article/details/82951910