黑马程序员——Java学习笔记之⑦——“网络编程”


-----------  android培训 java培训 、期待与您交流! ------------


1、网络模型图解:

黑马程序员——Java学习笔记之⑦——“网络编程”_第1张图片


2、网络通讯要素:

①IP地址:(本机默认Ip地址127.0.0.1,即本地回环地址)不易记忆,可用主机名:localhost,封装为InetAddress类。

②端口号:其实是一台主机上每个应用程序的标识。没有封装对象,有效端口:0-65535,其中0-1024为系统占用或保留端口。

③传输协议:其实是通讯规则。包括TCP和UDP两种,其特点如下:

TCP:(打电话,实时通讯,下载) 建立连接,形成传输数据的通道; 在连接中进行大数据量传输; 通过三次握手完成连接,是可靠的; 必须建立连接,效率会稍低。

UDP:(视频会议、网络聊天等) 将数据及源和目的封装成数据包,不需要建立连接;每个数据报的大小限制在64k内;面向无连接,所以不可靠;不需要建立连接,速度快。

④Socket:为网络服务提供的一种机制。网络通信通过通信方两端的Socket通信,数据在Socket之间通过IO传输。


3、InetAddress.getLocalHost(); 用来获取本机名和IP地址。

getHostAddress(); 用来获取主机的IP地址。

getHostName(); 用来获取主机名。

InetAddress.getByName( String str); 获取某个网址的IP地址和主机名。

注意:在网上,一定能获得别的主机的IP地址,但是不一定能获取到别的主机上的主机名。

以下为一些获取上述网络通讯要素的操作示例:

黑马程序员——Java学习笔记之⑦——“网络编程”_第2张图片


4、通过UDP传输方式发送和接收数据:

发送方编程思路和步骤:

①建立udpsocket服务(发送端点的建立)

DatagramSocket ds = new DatagramSocket();

②提供数据,并将数据封装到数据报中

byte[] data = "UDP Test!".getBytes();

DatagramPacket dp = new DatagramPacket(data, data.length, InetAddress.getByName("192.168.1.101"),10000);

③通过socket服务的发送功能,将数据包发出去

ds.send(dp);

④关闭资源

ds.close();

编程示例如下:

黑马程序员——Java学习笔记之⑦——“网络编程”_第3张图片


接收方编程思路和步骤:

①建立udpsocket服务。通常会监听一个端口,其实就是给这个接收端网络应用程序定义数字标识,明确该接收哪些数据,方便程序处理。

DatagramSocket ds = new DatagramSocket(10000);

②定义一个数据包,用于存储接收到的字节数据,并用数据包对象中的方法提取包中的数据和各种信息。

byte[] buff = new byte[1024];

DatagramPacket dp = new DatagramPacket(buff,buff.length);

③通过socket服务的receive方法,将接收到的数据存入已定义好的数据包中。

ds.receive(dp);

④通过数据包对象的特有功能,将这些不同的数据取出。打印在控制台上。

String ip = dp.getAddress().getHostAddress();
String data = new String(dp.getData(),0,dp.getLength());

//int port = dp.getPort(); 得到发送端发送数据的端口号。

⑤关闭资源

ds.close(); 

编程示例如下:

黑马程序员——Java学习笔记之⑦——“网络编程”_第4张图片


5、通过TCP传输方式发送和接收数据:

客户端编程思路和步骤:

①创建Socket服务,并指定要连接主机的地址和端口

Socket s = new Socket("192.168.1.101",13000);

②获取socket流中的输出流,发送数据

OutputStream out = s.getOutputStream();

out.write("TCP Test!".getBytes());

③发送完数据后关闭客户端资源。

s.close();


服务器端编程思路和步骤:

①通过ServerSocket建立socket服务,并监听一个端口

ServerSocket ss = new ServerSocket(13000);

②通过ServerSocket的accept方法,获取连接过来的客户端对象。

Socket s = ss.accept();//阻塞式方法,总是在等待来自客户端的连接请求

③客户端如果发过来数据,那么服务器端要使用对应的客户端对象,并获取到该客户端对象的读取流,并打印在控制台上。

InputStream in = s.getInputStream();

byte[] buff = new byte[1024];

int len = in.read(buff);

System.out.println(new String(buff,0,len));

④关闭与客户端的连接。注:不用关闭服务器,因为服务器端总是在等待客户端连接。

s.close();


TCP传输协议应用示例如下:

黑马程序员——Java学习笔记之⑦——“网络编程”_第5张图片


6、在应用TCP传输协议,在客户端和服务器端互相传送文件时,如果将某个特定的字符串(例如:“over”)作为文件输出流结束的标记的话,可能会发生异常。这种情况就是,如果文件中某一行的内容就是“over”,那么文件传送就会停止,这就是所说的异常情况。要解决这种情况就是,在文件传输完毕后,使用shutdownOutput()关闭客户端输出流,相当于给流中加入了一个结束标记-1。这样就能避免这种异常情况的发生。应用示例如下:

黑马程序员——Java学习笔记之⑦——“网络编程”_第6张图片

黑马程序员——Java学习笔记之⑦——“网络编程”_第7张图片


7、URL相关:

String getFile();  获取此 URL 的文件名。 
  String getHost() ; 获取此 URL 的主机名(如果适用)。 
  String getPath() ; 获取此 URL 的路径部分。 
  int getPort() ; 获取此 URL 的端口号。 
String getProtocol() ; 获取此 URL 的协议名称。 
  String getQuery();  获取此 URL 的查询部分。

URLConnection conn = url.openConnection();  //建立连接,不用再定义socket了

URL应用示例如下:

黑马程序员——Java学习笔记之⑦——“网络编程”_第8张图片


----------- android培训java培训、期待与您交流! ------------



你可能感兴趣的:(黑马程序员-Java学习笔记)