JavaSE基础复习:网络编程

  ------- 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的格式由下列三部分组成  
第一部分是协议或称为服务方式httpshttpftp 
第二部分是存有该资源的主机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
特点:
该结构的软件,只开发服务器端,不开发客户端,因为客户端直接由浏览器取代。 
开发成本相对低,维护更为简单。
缺点:所有运算都要在服务端完成。






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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值