黑马程序员-----网络编程

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

网络编程

一、概述

       计算机网路指分布在不同地域的计算机,通过外部设备连接起来,实现了资源共享与数据传输的计算机系统。

       网络通讯要素:IP、端口、协议。

       1IP,网络中的设备标识,每台主机(Host)都有一个唯一的IP地址。IP地址的长度为32位,分为4段,每段8位,用十进制数字表示,每段数字范围为0~255,段与段之间用句点隔开。

IP地址是由网络号和主机号组成

A类地址:8位网络位,24位主机位

B类地址: 16位网络位,16位主机位

C类地址: 24位网络位,8位主机位

特殊的IP地址:   127.0.0.1 表示 本机回环地址

       2、端口,用于标识进程

Port分类(0~65535)

公认端口(WellKnownPorts):从01023,它们紧密绑定(binding)于一些服务。 

注册端口(RegisteredPorts):从102449151。它们松散地绑定于一些服务。

动态和/或私有端口(Dynamicand/orPrivatePorts):从4915265535

常用端口   

21    FTP        

80    HTTP

443  HTTPS

3306  MySql

8080  Tomcat

       3、协议

TCP协议:建立连接,通过三次握手完成连接,可靠协议,效率稍低,进行大数据量传输

UDP协议:面向无连接,每个数据包限制在64K内,不可靠协议,速度快 

网络模型:

OSI参考模型:7层 应用层、表示层、会话层、传输层、网际层、数据链路层、物理层

TCP/IP参考模型 4层  应用层(应用层、表示层、会话层)(FTP,HTTP)、 传输层(TCP/IP)、 网际层(IP) 、主机至网络层(数据链路层、物理层)

 二、Java网络编程

       InetAddress 类,此类表示互联网协议 (IP) 地址将其封装为特定的对象java.net.*;

InetAddress i = InetAddress.getLocalHost();获得本机主机名和IP地址

i.getHostAddress();获得本机IP地址

i.getHostName();获得本机名称

InetAddress ia = InetAddress.getByName(“www.baidu.com”);

InetAddress[]  ia = InetAddress.getAllByName(“www.baidu.com”);

三、Socket编程

       Socket称作“套接字”,用于描述IP地址和端口,是一个通信链的句柄(引用)。Socket是为网络服务提供的一种机制。通信的两端都有Socket,网络通信其实就是Socket间的通信,数据在两个Socket间通过IO传输。

       1、UDP传输  DatagramSocket    DatagramPacket

       发送端:通过udp传输方式,将一段文字数据发送出去

思路:

1.建立udpsocket服务

2.提供数据,并将数据封装到数据包

3.通过Socket服务的发送工鞥呢,将数据包发出去

4.关闭资源

Class UdpSend
{
    public static void main(String[] args)  throws Exception
    {
        //创建udp服务
        DatagramSocket ds = new DatagramSocket();
        //确定数据并封包
        byte[] data = “udp ge mei lai le”.getBytes();
        DatagramPacket dp = new DatagramPacket(buf,buf.length,InetAdderss.getByName(“192.168.2.1”),10000) ;
        ds.send(dp);
        ds.close();
    }
}

       接收端:定义一个应用程序,用于接收并处理数据

思路:

1.定义udpsocket服务。定义数字标识

2.定义一个数据包,存储接收到的字节数据

3.通过Socket服务的receive方法将接收到的数据存入数据包

4.铜鼓数据包对象特有功能,将这些不同数据取出,打印在控制台

5.关闭资源

Class UdpReceive
{
     public static void main(String[] args)  throws Exception
     {
         //创建udp服务,可以绑定端口
         DatagramSocket ds = new DatagramSocket(10000);
         //确定数据并封包
         byte[] data = new byte[1024];
         DatagramPacket dp = new DatagramPacket(buf,buf.length) ;
         //接收,阻塞式没数据就等待
         ds.receive(dp);
         //数据处理
         String IP = dp.getAddress().getHostAddress();
         new String(dp.getData(),0,dp.getLength());
         int port = dp.getPort();
 
         ds.close();
    }
}

       2、TCP传输  Socket  ServiceSocket

       3.1:客户端

       TCP是面向连接的,建立Socket时就要有服务端存在并连接成功,形成通路后,在该通路进行数据传输。 

练习:建立TCP客户端服务端通讯

public static void main(String[] args) throws Exception {
		Socket socket = new Socket("127.0.0.1",10000);
		OutputStream  out = socket.getOutputStream();
		
		out.write("你好".getBytes());
		socket.close();
	}
       3.2服务器端

public static void main(String[] args) throws Exception {
		ServerSocket server = new ServerSocket(10000);
		Socket  socket = server.accept();
		InputStream  in = socket.getInputStream();
		byte [] b = new byte[1024];
		int len = 0;
		while((len = in.read(b)) != -1){
 System.out.println(socket.getInetAddress().getHostAddress()+": “
                                 +new String(b,0,len));
		}
		server.close();
	}

四、URL和URLConnection 

      1、URL

URI:统一资源标示符。URI还包括一个子类,即统一资源名称(URN)

URL:统一资源定位符,即根据URL能够定位到网络上的某个资源,它是指向互联网“资源”的指针。

常用方法:

URL url = new URL(“http://192.168.1.21:8080/myweb/demo.html?Name=haha&age=30”);新建URL对象

url.getProtocol();获取协议

url.getHost();获取主机

url.getPort();端口,url中没指定时,默认-1,一般返回-1时自己设为80

url.getPath();

url.getFile();

url.getQuery();Name=haha&age=30获取参数

      2、URLConectionURL连接器对象

示例:

public class URLDemo
{
        public static void main(String[] args) throws MalformedURLException,IOException {                
                String str_url = "http://172.16.2.91:8080/myweb/1.html?name=lisi";
                URL url = new URL(str_url);
                //获取url对象的Url连接器对象。将连接封装成了对象:
                URLConnection conn = url.openConnection();
                System.out.println(conn);
                //由于URLConnection对象已经把响应头给解析了,所以,可以通过URLConnection对象获取响应头某属性名对应的属性值。
                String value = conn.getHeaderField("Content-Type");
                System.out.println(value);
        }
}


你可能感兴趣的:(Java基础知识总结)