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地址,但是不一定能获取到别的主机上的主机名。
以下为一些获取上述网络通讯要素的操作示例:
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();
编程示例如下:
接收方编程思路和步骤:
①建立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();
编程示例如下:
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传输协议应用示例如下:
6、在应用TCP传输协议,在客户端和服务器端互相传送文件时,如果将某个特定的字符串(例如:“over”)作为文件输出流结束的标记的话,可能会发生异常。这种情况就是,如果文件中某一行的内容就是“over”,那么文件传送就会停止,这就是所说的异常情况。要解决这种情况就是,在文件传输完毕后,使用shutdownOutput()关闭客户端输出流,相当于给流中加入了一个结束标记-1。这样就能避免这种异常情况的发生。应用示例如下:
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应用示例如下:
----------- android培训、java培训、期待与您交流! ------------