09_网络编程

1、网络

1.1 网络的基本概念

  • 将不同区域的电脑连在一起,组成局域网、城域网、广域网。
  • 网络能够实现:(1)资源共享;(2)信息传输与集中处理;(3)负载均衡与分布处理。
  • 组成网络的两个重要部分:(1)通讯协议;(2)通信接口

1.2 网络分层

在这里插入图片描述
在这里插入图片描述

1.3 ip

  • 表示一个通信实体的地址。
  • 使用的对象:InetAddress
public class TestIP {
	public static void main(String[] args) throws UnknownHostException {
		//获取本机ip,用户名
		InetAddress addr = InetAddress.getLocalHost();
		System.out.println(addr.getHostAddress());
		System.out.println(addr.getHostName());
		
		//根据域名得到InetAddress对象
		addr = InetAddress.getByName("www.baidu.com");
		System.out.println(addr.getHostAddress());
		System.out.println(addr.getHostName());
		
		//根据ip得到InetAddress对象
		addr = InetAddress.getByName("183.232.231.172");
		System.out.println(addr.getHostAddress());
		System.out.println(addr.getHostName());
	}
}

1.4 端口(port)

  • 使用端口区分软件。
  • 端口2个字节,0-65535。
  • 同一个协议端口不能冲突。
  • 使用的对象:InetSocketAddress。构造器:
new InetSocketAddress(地址,端口)
public class TestPort {
	public static void main(String[] args) {
		InetSocketAddress socketAddress = new InetSocketAddress("127.0.0.1", 7777);
		InetSocketAddress socketAddress1 = new InetSocketAddress("localhost", 8888);
		System.out.println(socketAddress.getAddress());
		System.out.println(socketAddress1.getPort());
	}
}

1.5 URL

URL为统一资源定位器,由四部分组成:

  • 协议
  • 存放资源的主机域名
  • 端口号
  • 资源文件名
http://www.baidu.com:80/index.html
public class TestURL {
	public static void main(String[] args) throws MalformedURLException {
		URL url = new URL("http://www.baidu.com:80/index.jsp?username=lisi&age=25#aa");
		System.out.println("协议:" + url.getProtocol());
		System.out.println("主机域名:" + url.getHost());
		System.out.println("端口号:" + url.getPort());
		System.out.println("资源文件名:" + url.getFile());
		System.out.println("资源文件名:" + url.getPath());
		System.out.println("参数:" + url.getQuery());
		System.out.println("锚点:" + url.getRef());
	}
}

在这里插入图片描述

2、传输协议

2.1 TCP

一种面向连接的、可靠的、基于字节流的传输层通信协议。特点:

  • 面向连接
  • 点到点通信
  • 高可靠性
  • 占用系统资源多,效率低
    在这里插入图片描述
    在这里插入图片描述

2.2 UDP

一种无连接的传输协议。特点:

  • 非连接,传输不可靠,可能丢失
  • 发送不管对方是否准备好,接收方收到也不确认
  • 可以广播发送
  • 非常简单的协议,开销小
    在这里插入图片描述
套接字(Socket)

在这里插入图片描述
在这里插入图片描述

3、UDP

基本步骤:
3.1 接收段(Server):
  • (1)使用DatagramSock创建接收端,指定端口;
  • (2)准备容器,封装成DatagramPacket包裹;
  • (3)阻塞式接收包裹:receive(DatagramPacket,p);
  • (4)分析数据:getData()、getLength();
  • (5)释放资源。
public class UDPServer {
	public static void main(String[] args) throws Exception {
		System.out.println("接收方方启动中......");
//		 - (1)使用`DatagramSock`创建接收端,指定端口;
		DatagramSocket server = new DatagramSocket(7777);
//		 - (2)准备容器,封装成`DatagramPacket`包裹;
		byte[] datas = new byte[1024*60];
		DatagramPacket packet = new DatagramPacket(datas, 0, datas.length);
//		 - (3)阻塞式接收包裹:`receive`(DatagramPacket,p);
		server.receive(packet);
//		 - (4)分析数据:getData()、getLength();
		byte[] data = packet.getData();
		System.err.println(new String(data,0,data.length));
//		 - (5)释放资源。
		server.close();
	}
}
3.2 发送端(Client)
  • (1)使用DatagramSock创建发送端,指定端口;
  • (2)准备数据,转为字节数组;
  • (3)封装成DatagramPacket包裹,需要指定目的地;
  • (4)发送包裹:send(DatagramPacket,p);
  • (5)释放资源。
public class UDPClient {
	public static void main(String[] args) throws Exception {
		System.out.println("发送方启动中......");
//		 - (1)使用`DatagramSock`创建发送端,指定端口;
		DatagramSocket client = new DatagramSocket(8888);
//		 - (2)准备数据,转为字节数组;
		String data = "世界虽然不完美,我们仍可以治愈自己";
		byte[] datas = data.getBytes();
//		 - (3)封装成`DatagramPacket`包裹,需要指定目的地;
		DatagramPacket packet = new DatagramPacket(datas, 0, datas.length, new InetSocketAddress("127.0.0.1", 7777));
//		 - (4)发送包裹:`send`(DatagramPacket,p);
		client.send(packet);
//		 - (5)释放资源。
		client.close();
	}
}

4、TCP

基本步骤:
4.1 接收段(Server):
  • (1)使用ServerSocket创建服务器,指定端口;
  • (2)阻塞式等待连接(accept);
  • (3)操作:输入输出流操作;
  • (4)释放资源。
public class TCPServer {
	public static void main(String[] args) throws IOException {
		System.out.println("接收端启动中......");
//		 - (1)使用ServerSocket创建服务器,指定端口;
		ServerSocket server = new ServerSocket(6666);
//		 - (2)阻塞式等待连接(accept);
		Socket accept = server.accept();
//		 - (3)操作:输入输出流操作;
		DataInputStream dis = new DataInputStream(accept.getInputStream());
		String data = dis.readUTF();
		System.out.println(data);
//		 - (4)释放资源。
		dis.close();
		
	}
}
4.2 发送段(Client):
  • (1)使用Socket创建客户端,指定服务器地址和端口;
  • (2)操作:输入输出流操作;
  • (3)释放资源。
public class TCPClient {
	public static void main(String[] args) throws UnknownHostException, IOException {
		System.out.println("发送端启动中......");
//		 - (1)使用Socket创建客户端,指定服务器地址和端口;
		Socket client = new Socket("127.0.0.1", 6666);
//		 - (2)操作:输入输出流操作;
		DataOutputStream dos = new DataOutputStream(client.getOutputStream());
		String data = "世界虽然不完美,我们仍可以治愈自己";
		dos.writeUTF(data);
		dos.flush();
//		 - (3)释放资源。
		dos.close();
		client.close();

	}

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值