计算机网路指分布在不同地域的计算机,通过外部设备连接起来,实现了资源共享与数据传输的计算机系统。
网络通讯要素:IP、端口、协议。
1、IP,网络中的设备标识,每台主机(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):从0到1023,它们紧密绑定(binding)于一些服务。
注册端口(RegisteredPorts):从1024到49151。它们松散地绑定于一些服务。
动态和/或私有端口(Dynamicand/orPrivatePorts):从49152到65535。
常用端口
21 FTP
80 HTTP
443 HTTPS
3306 MySql
8080 Tomcat
3、协议
TCP协议:建立连接,通过三次握手完成连接,可靠协议,效率稍低,进行大数据量传输
UDP协议:面向无连接,每个数据包限制在64K内,不可靠协议,速度快
网络模型:
OSI参考模型:7层 应用层、表示层、会话层、传输层、网际层、数据链路层、物理层
TCP/IP参考模型 4层 应用层(应用层、表示层、会话层)(FTP,HTTP)、 传输层(TCP/IP)、 网际层(IP) 、主机至网络层(数据链路层、物理层)
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称作“套接字”,用于描述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();
}
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);
}
}