------- android培训、java培训、期待与您交流! ----------
网络模型:OSI参考模型,TCP/IP参考模型;
TCP/IP参考模型:
应用层传输层(TCP/UDP)
网络层(IP层)
物理层和数据链路层
InetAddress类
public class InetAddressTest
{
public static void main(String[] args)
throws Exception
{
// 根据主机名来获取对应的InetAddress实例
InetAddress ip = InetAddress.getByName("www.baidu.com");
// 判断是否可达
System.out.println("百度:" + ip.toString() + " : "+ip.isReachable(5000));
// 获取该InetAddress实例的IP字符串
System.out.println(ip.getCanonicalHostName());
System.out.println(ip.getHostName());
System.out.println(ip.getHostAddress());
// 根据原始IP地址来获取对应的InetAddress实例
// InetAddress local = InetAddress.getByAddress(new byte[]{127,0,0,1});
InetAddress local = InetAddress.getLocalHost();
System.out.println("本机是否可达:" + local.isReachable(2000)+ " : " + local.getHostAddress());
// 获取该InetAddress实例对应的全限定域名
System.out.println(local.getCanonicalHostName());
}
}
运行结果是:
百度:www.baidu.com/61.135.169.125 : false
61.135.169.125
www.baidu.com
61.135.169.125
本机是否可达:true : 192.168.1.66
ACERCN---//---本机是否可达:true : 127.0.0.1-------localhost
UDP不是面向连接的
1、发送端
byte[] buf = "UDP发送端".getBytes();
DatagramPacket dpSent = new DatagramPacket(buf,buf.length,InetAddress.getByName("127.0.0.1"),30000);
DatagramSocket ds = new DatagramSocket();
ds.sent(dpSent);
ds.close();
2、接收端
DatagramSocket ds = new DatagramSocket(30000);//接收端需要指定端口
byte[] buf = new byte[4*1024];
DatagramPacket dpRece = new DatagramPacket(buf,buf.length);
ds.receive(dpRece);
byte[] bufRece = dpRece.getData();
System.out.println(new String(bufRece));
广播地址:192.168.1.255
TCP客户端和服务端
Socket
客户端代码:Socket s = new Socket("192.168.1.66",9999);
OutputStream out = s.getOutputStream();
ServerSocket
服务端代码:ServerSocket ss = new ServerSocket(9999);
Socket s = ss.accept();
InputStream in = s.getInputStream();
OutputStream out = s.getOutputStream();
URLDecoder和URLEncoder
application/x-www-form-urlencoded MIME 格式转换String key = URLEncoder.encode("黑马Java程序员","gbk");//---%BA%DA%C2%EDJava%B3%CC%D0%F2%D4%B1
String keyWord = URLDecoder.decode("%BA%DA%C2%EDJava%B3%CC%D0%F2%D4%B1","gbk");//---黑马Java程序员
UEL和URI
URL:统一资源定位符URI:统一资源标识符
URL的格式由下列三部分组成
第一部分是协议或称为服务方式httpshttpftp第二部分是存有该资源的主机IP地址和端口号省略为80
第三部分是主机资源的具体地址。如目录和文件名等。
第一部分和第二部分之间用“//”符号隔开
第二部分和第三部分用“/”符号隔开。
第一部分和第二部分是不可缺少的第三部分有时可以省略。
URL和URLConnection
URL和URI之间可以通过URL.toURI()和URI.toURL()相互转换。URL类可以通过构造函数得到一个URL实例,并提供了一系列getXxx方法,获取资源的各部分信息。
URL实例可以通过url.openStream()方法打开到此 URL 的连接并返回一个用于从该连接读入的 InputStream。
URLConnection类实例可以通过url.openConnection()方法获得,通过URLConnection实例可以获取关联url的输入和输出。
URLConnection conn = url.openConnection();
conn.setRequestProperty(key,value);
conn.getInputStream();
conn.getOutputStream();
Map<String,List<String>> map = conn.getRequestProperties(); //返回一个由此连接的一般请求属性构成的不可修改的 Map。
Map<String,List<String>> map = conn.getHeaderFields(); //返回头字段的不可修改的 Map。
URL举例:
public class URLDemo {
public static void main(String[] args) throws IOException {
String str_url = "http://192.168.1.66:8080/myweb/1.html";
URL url = new URL(str_url);
// System.out.println("getProtocol:"+url.getProtocol());
// System.out.println("getHost:"+url.getHost());
// System.out.println("getPort:"+url.getPort());
// System.out.println("getFile:"+url.getFile());
// System.out.println("getPath:"+url.getPath());
// System.out.println("getQuery:"+url.getQuery());
// InputStream in = url.openStream();
//获取url对象的Url连接器对象。
URLConnection conn = url.openConnection();
// String value = conn.getHeaderField("Content-Type");
// System.out.println(value);
// System.out.println(conn);
//输出sun.net.www.protocol.http.HttpURLConnection:http://192.168.1.100:8080/myweb/1.html
InputStream in = conn.getInputStream();
byte[] buf = new byte[1024];
int len = in.read(buf);
String text = new String(buf,0,len);
System.out.println(text);
in.close();
}
}
客户端和服务端原理
最常见的客户端:浏览器 :IE。
最常见的服务端:
服务器:Tomcat。
自定义服务端,使用已有的客户端IE,了解一下客户端给服务端发了什么请求?
发送的请求是:
GET /myweb/1.html HTTP/1.1 请求的资源路径 http协议版本。请求消息头 . 属性名:属性值
Accept: */*
Accept-Language: zh-cn,zu;q=0.5
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; InfoPath.2)
Host: 192.168.1.66:9090
Connection: Keep-Alive
//空行
//请求体。
//服务端发回应答消息。
HTTP/1.1 200 OK //应答行,http的协议版本 应答状态码 应答状态描述信息应答消息属性信息。 属性名:属性值
Server: Apache-Coyote/1.1
ETag: W/"199-1323480176984"
Last-Modified: Sat, 10 Dec 2011 01:22:56 GMT
Content-Type: text/html
Content-Length: 199
Date: Fri, 11 May 2012 07:51:39 GMT
Connection: close
//空行
//应答体。
网络结构,
1,C/S client/server
特点:该结构的软件,客户端和服务端都需要编写。
可发成本较高,维护较为麻烦。
好处:
客户端在本地可以分担一部分运算。
2,B/S browser/server
特点:该结构的软件,只开发服务器端,不开发客户端,因为客户端直接由浏览器取代。
开发成本相对低,维护更为简单。
缺点:所有运算都要在服务端完成。