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();
}
}