网络基础
网络的相关概念
网络通讯
概念:两台设备之间通过网络实现数据传输。即将数据通过网络从一台设备传输到另一台设备
在Java中java.net包下提供了一系列的类和接口,供程序员使用,完成网络通讯。
网络
概念:两台或多台设备通过一定的物理设备连接起来构成了网络。
根据网络的覆盖范围不同,对网络进行分类:
1.局域网:覆盖范围最小,仅仅覆盖一个教室或者一个机房。
2.城域网:覆盖范围较大,可以覆盖一个城市。
3.广域网:覆盖范围最大,可以覆盖全国,甚至全球,万维网是广域网的代表。
IP地址
用于唯一标识网络中的每一台计算机/主机,在命令行可以通过ipconfig指令查看本机ip地址。
如(以IPV4举例):192.168.16.1 其表示形式为 点分十进制 xx.xx.xx.xx 每一个十进制数范围为0~255(一个字节)
IP地址的组成:网络地址+主机地址
域名
如:www.baidu.com 其是为了方便记忆,解决IP难记的问题。 其通过HTTP协议将IP地址映射成域名。
端口
用于标识计算机上某个特定的网络程序。表示形式:以整数形式,端口范围0~65535 [2个字节表示端口0~2^16-1],要注意:0~1024已经被占用,比如 ssh 22, ftp 21, smtp 25 http 80
常见的网络程序端口号:
·tomcat :8080
·mysql:3306
·oracle:1521
·sglserver:1433
网络通讯协议
协议TCP/IP (Transmission Control Protocol/Internet Protocol)中文译名为传输控制协议/因特网互联协议,又叫网络通讯协议,这个协议是Internet最基本的协议、Internet国际互联网络的基础,简单地说,就是由网络层的IP协议和传输层的TCP协议组成的。
对网络协议的理解:在网络通讯时 数据的组织形式,就是协议
对网络传输的数据进行的组织形式如下:
TCP和UDP
TCP协议:传输控制协议
1.使用TCP协议前,须先建立TCP连接,形成传输数据通道
2. 传输前,采用"三次握手"方式,是可靠的
3.TCP协议进行通信的两个应用进程◇客户端、服务端
4.在连接中可进行大数据量的传输
5.传输完毕,需释放已建立的连接,效率低
UDP协议:用户数据协议
1.将数据、源、目的封装成数据包◇不需要建立连接
2.每个数据报的大小限制在64K内,不适合传输大量数据
3.因无需连接◇故是不可靠的
4.发送数据结束时无需释放资源(因为不是面向连接的),速度快
5.举例: 厕所通知:发短信
TCP的三次握手:
Java网络编程
java_InetAddress类
InetAddress类主要用于表示互联网协议(IP)地址。它提供了一些方法来获取和操作 IP 地址相关的信息,比如:
获取本地主机的InetAddress实例。
根据主机名或 IP 地址字符串获取对应的InetAddress实例。
获取 IP 地址的字节表示等。
它在网络编程中经常被用于建立网络连接、识别网络节点等操作
public class Ipnet {
//InetAddress 常见方法 获得InetAddress实例一般不用构造器,而是使用静态方法(即;内部工厂方法)
public static void main(String[] args) throws UnknownHostException {
//1.获取 本机InetAddress对象(本机地址)
InetAddress localAddress=InetAddress.getLocalHost();
System.out.println("host1 = "+localAddress);
//2.根据 域名获取InetAddress对象(域名地址)
InetAddress domainAddress=InetAddress.getByName("www.baidu.com");
System.out.println("host2 = "+domainAddress);
//3.根据 指定主机名(ip地址)获取InetAddress对象(ip地址)
InetAddress ipAddress=InetAddress.getByName("梦安");
System.out.println("host3 = "+ipAddress);
//4.根据 InetAddress对象获取对应地址
String ipAddress2=localAddress.getHostAddress();
System.out.println("ipAddress2 = "+ipAddress2);
}
}
java_Socket类
Socket类在网络编程中起着重要作用。它代表了客户端和服务器之间的一个通信端点。通过创建Socket对象,可以实现客户端与服务器之间的数据传输。
主要特点和功能包括:
可以建立 TCP 连接(流式套接字)。
提供了输入流和输出流用于数据的读写。
可以设置各种连接参数,如超时时间等。
使用Socket类能够方便地进行网络通信程序的开发,实现不同主机之间的数据交互。
TCP编程
如下代码实现,客户端向服务端发送数据:
public class SocketTCP01Server {
public static void main(String[] args) throws IOException {
//1.在主机 9999端口 监听,等待连接;
ServerSocket serverSocket = new ServerSocket(9999);
System.out.println("服务端在9999监听....");
//2. 当没用客户端链接 9999 端口时,程序会阻塞,等待连接。
//如果用客户端连接,则会返回Socket对象,程序继续。
Socket socket=serverSocket.accept();
System.out.println("socket = "+socket.getClass());
//3.通过Socket。getInputStream()读取客户端写入到数据通道的数据,显示。
InputStream inputStream = socket.getInputStream();
//4.读入
byte[]buf=new byte[1024];
int readLen=0;
while ((readLen=inputStream.read(buf))!=-1){
System.out.println(new String(buf,0,readLen));
}
//5.关闭流
inputStream.close();
socket.close();
serverSocket.close();
}
}
public class SocketTCP01Client {
public static void main(String[] args) throws IOException {
//1.连接服务端(IP,端口)
Socket socket=new Socket(InetAddress.getLocalHost(),9999);
System.out.println("客户端 socket返回 = "+socket.getClass());
//2.连接后,生成Socket,通过 socket。getOutStream()
//得到与socket对象联系的 输出流对象
OutputStream outputStream = socket.getOutputStream();
//3.通过输出流,写入数据到 数据通道。
for (int i = 0; i < 6; i++) {
Scanner in =new Scanner(System.in);
String next = in.next();
outputStream.write(next.getBytes());
}
//关闭 流 socket ,必须关闭
outputStream.close();
socket.close();
System.out.println("客户端退出!");
}
}
双向发送数据时,需要设置写入结束标记 socket.shutdowmOutput();