通信协议
协议:就好比约定,就好比我们现在说的普通话。
网络通信协议:速率,传输码率、代码结构、传输控制…(非常的复杂)
TCP/IP协议模型 (Transmission Control Protocol/Internet Protocol 翻译为:传输控制协议/互联网协议),包含了一系列构成互联网基础的网络协议,是Internet的核心协议。
重要的协议:
TCP和UDP对比
TCP:打电话
- 连接、稳定
- “三次握手” “四次挥手”
最少需要3次才可以保证稳定连接(“三次握手”)
A:你愁啥
B:瞅你咋地
A:干一场!
A:我要走了(“四次挥手”)
B:你真的要走了吗
B:你真的真的要走了吗
A:我真的要走了
- 客服端、服务端
- 传输完成,释放连接,效率低。
UDP:发短信
- 不连接,不稳定
- 客服端、服务端:没有明确的界限
- 不管有没有准备好,都可以发送给你。
- DDOS:洪水攻击!(饱和攻击)
TCP(Transmission Control Protocol传输控制协议)
客服端:
- 连接服务器 Socket
- 发送消息
服务端:
- 建立服务的端口 ServerSocket
- 等待用户的连接 accept
- 接收用户的消息
示例:
TcpClientDemo01.java
客服端
package net;
import java.io.IOException;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.Socket;
// 客户端
public class TcpClientDemo01 {
public static void main(String[] args) {
OutputStream outputStream = null;
Socket socket = null;
try {
// 1.要知道服务器的地址
InetAddress serverIP = InetAddress.getByName("127.0.0.1");
// 2.端口号
int port = 9999;
// 3.创建一个socket连接
socket = new Socket(serverIP, port);
// 4.发送消息 IO流
outputStream = socket.getOutputStream();
outputStream.write("李旭永远的神".getBytes());
} catch (IOException e) {
e.printStackTrace();
} // 关闭资源 从下往上依次关闭
finally {
if (outputStream != null) {
try {
outputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (socket != null) {
try {
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
TcpServerDemo01.java
服务端
package net;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;
// 服务端
public class TcpServerDemo01 {
public static void main(String[] args) {
ServerSocket serverSocket = null;
Socket socket = null;
InputStream inputStream = null;
ByteArrayOutputStream byteArrayOutputStream = null;
try {
// 1.我要有一个地址
serverSocket = new ServerSocket(9999);
// 2.等待客户端连接
socket = serverSocket.accept();
// 3.读取客户端的消息
inputStream = socket.getInputStream();
// 4.管道流
byteArrayOutputStream = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int length;
while ((length = inputStream.read(buffer)) != -1) {
byteArrayOutputStream.write(buffer, 0, length);
}
System.out.println(byteArrayOutputStream.toString());
} catch (IOException e) {
e.printStackTrace();
} finally {
// 关闭资源 从下往上依次关闭
if (byteArrayOutputStream != null) {
// 资源为空才去关闭它,否则没必要
try {
byteArrayOutputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (inputStream != null) {
try {
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (socket != null) {
try {
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (serverSocket != null) {
try {
serverSocket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
运行结果:
TCP文件上传实现
TcpClientDemo02.java
扫描二维码关注公众号,回复:
12650290 查看本文章
package net;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.Socket;
// 客服端 实现文件上传
public class TcpClientDemo02 {
public static void main(String[] args) throws IOException {
// 1.创建一个Sockey连接
Socket socket = new Socket(InetAddress.getByName("127.0.0.1"), 9000);
// 2.创建一个输出流
OutputStream socketOutputStream = socket.getOutputStream();
// 3.读取文件
FileInputStream fileInputStream = new FileInputStream(new File("boy.jpg"));
// 4.写出文件
byte[] buffer = new byte[1024];
int length;
while ((length = fileInputStream.read(buffer)) != -1) {
socketOutputStream.write(buffer, 0, length);
}
// 5.关闭资源
fileInputStream.close();
socketOutputStream.close();
socket.close();
}
}
TcpServerDemo02.java
package net;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;
// 服务端接收文件
public class TcpServerDemo02 {
public static void main(String[] args) throws IOException {
// 1.创建服务
ServerSocket serverSocket = new ServerSocket(9000);
// 2.监听客户端的连接
Socket socket = serverSocket.accept();// 阻塞式监听
// 3.获取输入流
InputStream inputStream = socket.getInputStream();
// 4.文件输出
FileOutputStream fileOutputStream = new FileOutputStream(new File("receive.jpg"));
byte[] buffer = new byte[1024];
int length;
while ((length = inputStream.read(buffer)) != -1) {
fileOutputStream.write(buffer, 0, length);
}
// 关闭资源
fileOutputStream.close();
inputStream.close();
socket.close();
serverSocket.close();
}
}
运行结果:
认识Tomcat
服务端
- 自定义 S(Serve)
- Tomcat服务器 S(Serve)
客户端
- 自定义 C(Client)
- 游览器 B(Browser)
- 启动服务器
2.在游览器打开:localhost:8080