基本概念
协议
在互联网中进行通信时需要进行一些协定,这样的约定就叫做协议。当多个协议放在一起的时候,就叫做协议簇/协议族。
常见的协议有:
1. HTTP协议:超文本传输协议,用于浏览网页时需要遵循的协议。
2. FTP协议:文件传输协议,用于传输文件。
3. TCP协议:传输控制协议,是一种面向连接的协议,类似于打电话。
4. UDP协议:用户数据报协议,是一种非面向连接的协议,类似于写信。
5. IP协议:互联网协议,是上述协议的底层协议。
IP地址
本质上就是互联网中的地址标识。
IP地址主要有两个版本,IPV4和IPV6,主流是IPV4。
IPV4的地址本质上是由32位二进制组成的整数,IPV6则是由128位二进制组成的整数。
端口号
可以定位到设备中的某一个设备
端口的范围是0 ~ 65535,0 ~ 1203由系统占用。
UDP和TCP网络编程的模型
UDP网络编程的模型
模型分析
主机A:
1. 创建DatagramSocket类型的对象,准备用于通信的Socket。
2. 创建用于发送/接收需要的byte数组类型的数据。
3. 创建DatagramPacket类型的对象,准备用于通信的数据报。
4. 发送/接收数据。
5. 关闭相关的资源。主机B:
1. 创建DatagramSocket类型的对象,准备用于通信的Socket。
2. 创建用于发送/接收需要的byte数组类型的数据。
3. 创建DatagramPacket类型的对象,准备用于通信的数据报。
4. 发送/接收数据。
5. 关闭相关的资源。
代码实现
主机A(发送数据):
package com.UDP;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
public class A {
public static void main(String[] args) throws Exception{
//创建DatagramSocket对象,准备用于通信的Socket
DatagramSocket ds = new DatagramSocket();
//创建传输的数据
byte[] by = new byte[1024];
by = new String("abcd").getBytes();
//创建DatagramPacket对象,准备用于通信的通信报
DatagramPacket dp = new DatagramPacket(by, by.length, InetAddress.getByName("127.0.0.1"), 4567);
//发送数据
ds.send(dp);
//关闭相关资源
ds.close();
}
}
主机B(接收数据):
package com.UDP;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
public class B {
public static void main(String[] args) throws Exception{
//创建DatagramSocket的对象,用于通信的Socket
DatagramSocket ds = new DatagramSocket(4567);
//创建一个用于接收数据的 byte数组
byte[] by = new byte[1024];
//创建DatagramPacket的对象,用于通信的数据报
DatagramPacket dp = new DatagramPacket(by, by.length);
//接收数据
ds.receive(dp);
//打印结果
String result = new String(dp.getData(),0,dp.getLength());
System.out.println(result);
//关闭相关资源
ds.close();
}
}
TCP网络编程的模型
模型分析
服务端(Server):
1. 创建ServerSocket类型的对象,并提供端口号。
2. 等待客户的连接请求,如果没有客户端连接,则保持阻塞状态。
3. 当有客户端发出连接请求,就可以创建相关的流来进行通信。
4. 关闭相关的资源。客户端(Client):
1. 创建Socket,并提供目标主机IP和端口。
2. 发出连接请求时,就可以创建相关的流来进行通信。
3. 关闭相关的资源。
代码实现
服务端(接收数据然后返回数据):
package com.TCP;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class Server {
public static void main(String[] args) throws Exception{
//创建一个ServerSocket类型的对象,并提供端口号
ServerSocket ss = new ServerSocket(4568);
//从ServerSocket获取Socket对象
Socket s = ss.accept();
//当客户端发出连接请求时,就可以创建相关的流来进行通信,因为返回的是一个OutputStream和一个InputStream,因此可以传输多种类型的数据
DataOutputStream dos = new DataOutputStream(s.getOutputStream());
DataInputStream dis = new DataInputStream(s.getInputStream());
//接收返回的数据
int result = dis.read();
//打印数据
System.out.println(result);
//传输基本数据
dos.write(5);
dos.close();
dis.close();
ss.close();
}
}
客户端(发送数据然后等待数据传回):
package com.TCP;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.net.Socket;
public class Client {
public static void main(String[] args) throws Exception{
//创建一个Socket类型的对象,用于发送数据,提供主机IP和端口
Socket s = new Socket("192.168.3.77", 4568);
//当客户端发出连接请求时,就可以创建相关的流来进行通信,因为返回的是一个OutputStream和一个InputStream,因此可以传输多种类型的数据
DataOutputStream dos = new DataOutputStream(s.getOutputStream());
DataInputStream dis = new DataInputStream(s.getInputStream());
//发送数据
dos.write(4);
//接收数据
int result = dis.read();
//打印传输过来的数据,并且返回数据
System.out.println(result);
//关闭相关的资源
dis.close();
dos.close();
s.close();
}
}
0471