目录
目录
目录
网络编程概述
网络编程中有两个主要的问题:
一、网络通信两个要素:
1. 如何实现网络中的主机互相通信?
2. InetAdress
3. 端口号
4. 通信协议:
三、网络编程
1. TCP编程
2. UDP编程
3. URL编程
网络编程概述
网络编程中有两个主要的问题:
1. 如何准确的定位网络上的一台或多台主机,定位主机上的特定的应用 2. 找到主机后如何可靠高效地进行数据传输
一、网络通信两个要素:
1. 如何实现网络中的主机互相通信?
- ip 和 端口号
- 提供网络通信协议。 TCP/IP参考模型(应用层,传输层,网络层,物理+数据链路层),
2. InetAdress
- 唯一的标识 internet 上的计算机 ( 通信实体 )
- 本地回环地址(hostAddress):127.0.0.1 ? 主机名 ( hostName ):localhost
- IP地址分类方式一 : IPV4 ? ? IPV6
- IPV4:4个字节组成,4个0~255。大概42亿个, 30亿都在北美,亚洲4亿。2011年初已经用尽。以点分十进制表示,如192.168.0.1
- IPV6:128位(16个字节),写成8个无符号整数,每个整数用四个十六进制位表示,数之间用冒号 隔开,如:2001:0db8:3c4d:0015:0000:0000:1a2f:1a2b
- IP地址分类方式2:公网地址(万维网使用) 和 私有地址(局域网使用)。
- 192.168.开头的就是私有地址,范围即为 192.168.0.0 ~ 192.168.255.255,专门为组织机构内部使用
//获得IP地址
InetAddress inetAddresses2 = InetAddress.getByName("192.168.8.123");
//getHostName
System.out.println(inetAddresses2.getHostName());
//getHostAddress
System.out.println(inetAddresses2.getHostAddress());
//Canonical : 规范的
System.out.println(inetAddresses2.getCanonicalHostName());
域名解析:?现在本机的hosts文件,判断是否有输入的域名地址,没有的话,再通过DNS服务器,找主机。
3. 端口号
- 端口号标识正在计算机上运行的进程(程序)
- 不同的进程有不同的端口号,用来区分软件
- 被规定为一个16位的整数 0~65535
- TCP 和 UDP 各有 65535个端口,单个协议下端口不能冲突
- 端口分类:
公认端口: 0~1023。被预先定义的服务通信占用端口。 HTTP 默认端口 : 80 HTTPS 默认端口:443 FTP 默认端口: 21 Telnet 默认端口:23 注册端口:1024~49151、分配给用户进程或应用程序。 tomcat 默认端口:8080 Mysql 默认端口:3306 Oracle 默认端口:1521 动态、私有端口:49152~65535
4. 通信协议:
TCP/IP协议簇
用户传输协议 TCP (Transmission Control Protocol) 用户数据报协议UDP(User Datagram Protocol)
传输控制协议:TCP,和网络互联协议:IP,而得名,实际上是一组协议,包括多个具有不同功能且互为关联的协议。
IP(Internet Protocol)协议是网络层的主要协议,支持网间互联的数据通信。 TCP/IP协议模型从更实用的角度出发,形成了高效的四层体系结构,即物理链路层,IP层,传输层和应用层
TCP协议:类似于打电话
UDP协议:类似于发短信
DDOS洪水攻击
三、网络编程
1. TCP编程
客户端:Socket
//客户端
package com.kuang.lesson2;
import java.io.IOException;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;
//客户端
public class TcpClientDemo01 {
? ?public static void main(String[] args) {
? ? ? ?Socket socket = null;
? ? ? ?OutputStream os = null;
? ? ? ?try {
? ? ? ? ? ?//1. 连接服务器的地址
? ? ? ? ? ?InetAddress serverIP = InetAddress.getByName("127.0.0.1");
? ? ? ? ? ?int port = 8899;
? ? ? ? ? ?//2. 创建一个Socket
? ? ? ? ? ?socket = new Socket(serverIP,port);
? ? ? ? ? ?//3. 创建一个输出流,向外写东西
? ? ? ? ? ?os = ?socket.getOutputStream();
? ? ? ? ? ?os.write("你好,欢迎学习狂神说Java".getBytes());
? ? ? } catch (UnknownHostException e) {
? ? ? ? ? ?e.printStackTrace();
? ? ? } catch (IOException e) {
? ? ? ? ? ?e.printStackTrace();
? ? ? } finally {
? ? ? ? ? ?//4. 关闭资源
? ? ? ? ? ?try {
? ? ? ? ? ? ? ?if (os!=null){
? ? ? ? ? ? ? ? ? ?os.close();
? ? ? ? ? ? ? }
? ? ? ? ? ? ? ?if (socket!=null){
? ? ? ? ? ? ? ? ? ?socket.close();
? ? ? ? ? ? ? }
? ? ? ? ? } catch (IOException e) {
? ? ? ? ? ? ? ?e.printStackTrace();
? ? ? ? ? }
? ? ? }
? }
}
服务端:Servsocket
//1. 开放服务器端口,创建ServerSocket
serverSocket = new ServerSocket(8899);
//2. 等待客户端的连接
accept = serverSocket.accept();
//3. 读入客户端的消息,
is = accept.getInputStream();
2. UDP编程
发送端
//1. 建立DatagramSocket
DatagramSocket socket = new DatagramSocket();
//2. 封装数据包
?String msg = "UDPSender==>";
byte[] data = msg.getBytes();
InetAddress inet = InetAddress.getByName("127.0.0.1");
int port = 9090;
DatagramPacket packet = new DatagramPacket(data,0,data.length,inet,port);
//3. 通过 Socket 发送 packet
socket.send(packet);
//4. 关闭socket
socket.close();
接收端
?//1. 建立DatagramSocket,开放端口
DatagramSocket socket = new DatagramSocket(9090);
?//2. 接收数据
byte[] buffer = new byte[1024];
DatagramPacket packet = new DatagramPacket(buffer,0,buffer.length);
socket.receive(packet);
//3. 输出数据
// packet.getData() : 获取packet中的数据
System.out.println(new String(packet.getData(), 0, packet.getLength()));
//4. 关闭socket
socket.close();
3. URL编程
URL 的 基本结构由 5部分组成:
传输协议://主机名:端口号/文件名 #片段名?参数列表
|