网络编程的概述
什么是计算机网络?
计算机网络是一种将多个计算机设备连接起来,以实现信息交换和资源共享的系统。它通过通信线路和设备,将不同地理位置的计算机设备和终端设备连接起来,使得这些设备可以相互通信、交换信息,实现更广泛的通信应用。
网络编程的概述?
在网络的基础上,开发的程序能够进行数据传输
java语言将网络连接的细节都封装起来了,对外提供一套网络库(类),就可以进行统一环境的网络编程
网络模型
应用层
传输层
网络层
物理层
网络通信要素:
1.IP
互联网协议地址,计算机的地址
2.端口
计算中运行的每个程序都对应分配一个整书编号,不能重复
范围为0~65535,一般0~1024已经被系统占用
3.通信协议(规则,规范,约定)
规定传输的速率,代码结构,出错后如何应对等等规则
TCP
传输控制协议TCP
客户端向服务器发送数据前,首先要建立连接(测试网络是否通畅)
三次握手
1.客户端向服务器发送一个链接请求
2.当服务器收到客户端链接请求后,给客户端做出一个回应
3.客户端为服务器的回应做出确认回应
正式传输数据
断开时还要互相确认
可靠安全
四次握手
1.客户端向服务器发送一个断开的请求
2.服务器向客户端做出一个回应
3.服务器把没有传完的数据传输完毕,再向客户端做出回应
4.客户端向服务器端的回应作出回应
5.断开
UDP
用户数据报协议UDP
把要发送的数据封装成一个数据报(数据包),数据包包含数据,对方的ip,对方的端口,只管发送即可,是否发送成功是不知道的
发送导弹:输入目标地址,只管发送,不管送没送到
package Day1;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Socket;
import java.util.Scanner;
//客户端
public class Test1 {
public static void main(String[] args) {
try {
Socket socket=new Socket("10.13.238.225",8888);
Scanner scanner=new Scanner(System.in);
loop:while (true) {
System.out.println("请客户端输入想要发送的信息");
String s = scanner.next();
DataOutputStream dataOutputStream = new DataOutputStream(socket.getOutputStream());
dataOutputStream.writeUTF(s);
if(s.equals("0")){
break loop;
}
DataInputStream dataInputStream = new DataInputStream(socket.getInputStream());
String s1 = dataInputStream.readUTF();
System.out.println("服务端的信息");
System.out.println(s1);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
package Day1;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;
//服务器
public class Test2 {
public static void main(String[] args) {
try {
//创建服务器端口
Scanner scanner = new Scanner(System.in);
ServerSocket serverSocket=new ServerSocket(8888);
System.out.println("服务器启动成功!");
Socket socket=serverSocket.accept();//阻塞,监听客户的连接
loop:while (true) {
DataInputStream dataInputStream = new DataInputStream(socket.getInputStream());
System.out.println("客户端的信息");
System.out.println(dataInputStream.readUTF());
System.out.println("请服务器输入要发送的信息");
String s = scanner.next();
if (s.equals("0")) {
break loop;
}
DataOutputStream dataOutputStream = new DataOutputStream(socket.getOutputStream());
dataOutputStream.writeUTF(s);
}
} catch (IOException e) {
e.printStackTrace();
System.out.println("服务器启动失败!");
}
}
}