JavaSE基础复习:网络编程

来源:互联网 发布:网络电力仪表 编辑:程序博客网 时间:2024/06/11 13:14

  ------- 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%B1String 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.htmlInputStream 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培训、期待与您交流! ----------

原创粉丝点击