API-网络编程

API-网络编程

本章内容

网络编程概述

网络编程三要素

UDP编程

TCP编程

网络编程概述

计算机网络

     是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统,网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统。

网络编程

     就是用来实现网络互连的不同计算机上运行的程序间可以进行数据交换。

 

网络模型

计算机网络之间以何种规则进行通信,就是网络模型研究问题。

网络模型一般是指

     OSI(Open SystemInterconnection开放系统互连)参考模型

     TCP/IP参考模型

 

网络参考模型图

网络通信三要素

IP地址:InetAddress

   网络中设备的标识,不易记忆,可用主机名

端口号

   用于标识进程的逻辑地址,不同进程的标识

传输协议

   通讯的规则

   常见协议:TCP,UDP


IP地址

要想让网络中的计算机能够互相通信,必须为每台计算机指定一个标识号,通过这个标识号来指定要接受数据的计算机和识别发送的计算机,在TCP/IP协议中,这个标识号就是IP地址。

那么,我们如果获取和操作IP地址呢?

     为了方便我们对IP地址的获取和操作,java提供了一个类InetAddress供我们使用。


InetAddress类的使用

没有构造方法,那么如何使类提供的功能呢?

要掌握的功能

     获取任意主机:getByName

    

     主机名:getHostName

     主机Ip地址:getHostAddress


端口号

物理端口网卡口

逻辑端口我们指的就是逻辑端口

      A:每个网络程序都会至少有一个逻辑端口

      B:用于标识进程的逻辑地址,不同进程的标识

      C:有效端口:0~65535,其中0~1024系统使用或保留端口。

      通过360可以查看端口号


协议UDPTCP

UDP

     将数据源和目的封装成数据包中,不需要建立连接;每个数据报的大小在限制在64k;因无连接,是不可靠协议;不需要建立连接,速度快

TCP

     建立连接,形成传输数据的通道;在连接中进行大数据量传输;通过三次握手完成连接,是可靠协议;必须建立连接,效率会稍低


Socket

Socket套接字:

•  网络上具有唯一标识的IP地址和端口号组合在一起才能构成唯一能识别的标识符套接字。

Socket原理机制:

• 通信的两端都有Socket。

• 网络通信其实就是Socket间的通信。

• 数据在两个Socket间通过IO传输。


Socket机制图解

 

UDP传输

DatagramSocketDatagramPacket

建立发送端,接收端。

建立数据包。

调用Socket的发送接收方法。

关闭Socket

发送端与接收端是两个独立的运行程序。


UDP传输-发送端思路

1:建立udpsocket服务

2:将要发送的数据封装成数据包

3:通过udpsocket服务,将数据包发送出

4:关闭资源

 

UDP传输-发送端代码

 

UDP传输-接收端思路

1:建立udpsocket服务.

2:通过receive方法接收数据

3:将收到的数据存储到数据包对象中

4:通过数据包对象的功能来完成对接收到数据进行解析.

5:可以对资源进行关闭


UDP传输-接收端代码

 


UDP案例

从键盘录入数据进行发送,如果输入的是886那么客户端就结束输入数据。

这个时候完全可以把发送端代码发给大家了,我把接收端代码开启,大家就可以实现聊天了,但是,大家都要看我们的屏幕,即使我把接收端发给大家也是一样的,如何改进呢,使用广播地址即可。

最后,把刚才发送和接收程序分别用线程进行封装,完成一个UDP的聊天程序。


TCP传输

SocketServerSocket

建立客户端和服务器端

建立连接后,通过Socket中的IO流进行数据的传输

关闭socket

同样,客户端与服务器端是两个独立的应用程序。


TCP传输-客户端思路

1:建立客户端的Socket服务,并明确要连接的服务器。

2:如果连接建立成功,就表明,已经建立了数据传输的通道.就可以在该通道通过IO进行数据的读取和写入.该通道称为Socket,Socket流中既有读取流,也有写入流.

3:通过Socket对象的方法,可以获取这两个流

4:通过流的对象可以对数据进行传输

5:如果传输数据完毕,关闭资源


TCP传输-客户端代码

 

TCP传输-服务器端思路

1:建立服务器端的socket服务,需要一个端口

2:服务端没有直接流的操作,而是通过accept方法获取客户端对象,在通过获取到的客户端对象的流和客户端进行通信

3:通过客户端的获取流对象的方法,读取数据或者写入数据

4:如果服务完成,需要关闭客户端,然后关闭服务器,但是,一般会关闭客户端,不会关闭服务器,因为服务端是一直提供服务的


TCP传输-服务器端代码

 


TCP传输案例

服务器给客户端反馈

客户端键盘录入,服务器输出到控制台

客户端键盘录入,服务器输出文本文件

客户端文本文件,服务器输出到控制台

客户端文本文件,服务器输出文本文件

上传图片案例

服务器的代码用线程进行封装,这样可以模拟一个同时接收多人上传文件的服务器。(用循环也可以但是效率低,是单线程的程序)


TCP传输容易出现的问题

客户端连接上服务端,两端都在等待,没有任何数据传输。

通过例程分析:

   因为read方法或者readLine方法是阻塞式。

解决办法:

   自定义结束标记

   使用shutdownInput,shutdownOutput方法。


猜你喜欢

转载自blog.csdn.net/hc1151310108/article/details/80500746