简单来说就是把不同地区的计算机通过设备连接起来,实现不同地区之前的数据传输
网络编程
是借助计算机网络,实现我们所写的程序,在不同电脑上,可进行数据的传输
java
是支持网络间的数据传输的,降低层细节封装起来了,给程序员提供了一套标准的类库很方便使用java语言开发可以进行网络通信的软件
网络编程的核心问题
如何找到网络世界中的恶目标主机,以及目标软件
在终端 使用 ipconfig 指令查看ip
如何安全可靠的进行数据传输 协议 规则
如下:
IP
:在网络世界中,是计算机的地址局域网地址
: 192.168.1.20
连接到路由器,会自动分配IP
广域网地址
: 家里的宽带 与外界连接本机地址
: 本地回环地址 127.0.0.1
端口
:计算机中运行中的程序的编号,对应的是程序
ip+端口
找到目标计算机 以及你想要的程序先检测网络是否通畅,客户端是否能连接到服务器端
如果能连接到,则进行数据的传输,如果连接不到,就会报错
采用3次握手的机制 (连接请求)
1.第一次客户端给服务器发送一个信息
2.服务器收到客户端的请求后,需要给客户端做出一个反馈(表示服务器端收到客户端消息)
3.客户端收到服务器端确认反馈后,再一次向服务器发送一个反馈,以确保服务器知道他的
反馈,客户端是收到 (表示客户端成功收到服务器端消息)
TCP是可靠的安全的,相对于UDP效率低
四次挥手(端来请求)
不用建立连接,直接发送
服务端
ServerSocket
常用的方法
Socket accept() throws IOException
void close() throws IOException
package day15;
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
/*
服务器端
*/
public class Server {
public static void main(String[] args) {
//创建并启动服务器
try{
ServerSocket serverSocket = new ServerSocket(9999);
System.out.println("服务器启动成功");
while(true) {
Socket socket = serverSocket.accept();//监听有没有客户端连接到服务器,监听时,会阻塞程序
System.out.println("有傻逼端连接到服务器");
//接收客户端发送的数据
InputStream inputStream = socket.getInputStream();
//下面过于复杂,可以调用DataInputStream 但是必须对应DataOutputStream
// byte[] bytes = new byte[100];
// int size = inputStream.read(bytes);
// String s = new String(bytes, 0, size);
// System.out.println(s);
DataInputStream dataInputStream = new DataInputStream(inputStream);
String s= dataInputStream.readUTF();
System.out.println(s);
//服务器向客户端发送消息
OutputStream outputStream =socket.getOutputStream();
DataOutputStream dataOutputStream = new DataOutputStream(outputStream);
dataOutputStream.writeUTF("已经收到");
// 确保数据被发送出去,并释放资源
dataOutputStream.flush();
dataOutputStream.close();
socket.close();
}
} catch (IOException e) {
e.printStackTrace();
System.out.println("服务器启动失败,端口被占用");
}
}
}
客户端
常用方法
void close() throws IOException
InputStream getInputStream() throws IOException
OutputStream getOutputStream() throws IOException
package day15;
import java.io.*;
import java.net.Socket;
/*
客户端
*/
public class Client {
public static void main(String[] args) {
//创建客户端
//127.0.0.1自己地址
try {
//向服务器发送
Socket socket = new Socket("127.0.0.1", 9999);
//在客户端向服务器端发送一句话
OutputStream outputStream = socket.getOutputStream();//获取输出流
DataOutputStream dataOutputStream =new DataOutputStream(outputStream);
String s = "你好";
dataOutputStream.writeUTF(s);
//接受服务器
InputStream inputStream = socket.getInputStream();
DataInputStream dataInputStream = new DataInputStream(inputStream);
System.out.println(dataInputStream.readUTF());
} catch (IOException e) {
e.printStackTrace();
System.out.println("连接服务器失败");
}
}
}
服务端
package day16;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;
public class UDPReceive {
public static void main(String[] args) {
try {
while(true){
//接受数据的对象
DatagramSocket datagramSocket = new DatagramSocket(9999);
byte[] bytes = new byte[100];
//接受数据包
DatagramPacket datagramPacket = new DatagramPacket(bytes,0, bytes.length);
datagramSocket.receive(datagramPacket);
String s = new String(bytes,0,datagramPacket.getLength());
System.out.println(s);
datagramSocket.close();
}
} catch (SocketException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
客户端
package day16;
import java.io.IOException;
import java.net.*;
//发送端
public class UDPSendDemo {
public static void main(String[] args) {
try {
DatagramSocket datagramSocket = new DatagramSocket();//负责发送数据报
byte[] bytes = "你好sb邓钦文".getBytes();
DatagramPacket datagramPacket = new DatagramPacket(bytes,0, bytes.length, InetAddress.getByName("127.0.0.1"),9999);
//发送(datagramSocket方法)
datagramSocket.send(datagramPacket);
datagramSocket.close();
} catch (SocketException e) {
e.printStackTrace();
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
TCP
(传输控制协议)和UDP
(用户数据报协议)都是网络传输层协议,用于在网络中传输数据。它们之间的主要区别在于连接方式
、可靠性
、数据流方式
和功能
。
TCP
是面向连接的协议,发送方和接收方在发送数据之前,必须通过三次握手建立连接。这个过程确保了双方都已准备好进行数据传输。UDP
是无连接的协议,发送方在向接收方发送数据时不需要建立连接。这意味着UDP
可以更快地发送数据,但也可能导致数据的丢失或乱序。TCP
通过序号机制、确认机制、超时重传机制和数据校验来保证传输的可靠性。如果数据在传输过程中丢失或损坏,TCP
会重新发送数据,直到接收方成功接收为止。UDP
只添加了端口和差错检查的功能,不提供数据的可靠性保证。因此,UDP
在传输过程中可能会出现数据丢失或乱序的情况。TCP
是面向字节流的协议,将应用层传递下来的数据当做无结构的数据流进行处理。TCP
不知道所传数据的具体含义,只是将数据块拼接成一个段进行发送。UDP
是面向报文的协议,发送方的UDP
对应用程序交下来的报文添加首部后直接向下交付IP层。每个报文都是独立发送的,不需要进行拼接。TCP
支持单播、多播和广播的功能,可以实现一对一、一对多、多对多和多对一的数据传输。UDP
同样支持这些传输方式,但由于其无连接的特性,使得UDP在实时性要求较高的场景中更为适用,如视频流、音频流等。