1. 通信协议
[1] 协议: 约定,就好比我们现在交流时所规定的语言。
[2] TCP/IP协议族使我们现在使用较为广泛的一组协议。
1) 其中较为重要的是TCP/UDP协议
- TCP: 用户传输协议
- UDP: 用户数据报协议
2)出名的协议: TCP/IP协议
- TCP
- IP: 网络互连协议
[3] TCP与UDP之间的对比
- TCP: 打电话
- 需要连接,稳定
- 三次握手,四次分手(下面用一段话来总结这个过程)
最少需要三次,保证稳定的连接
土话 相关的官方语言
A: 你楸啥? (我想建立连接)
B: 楸你咋地? (好的可以)
A: 干一场 (双方连接)
四次分手
A: 我要走了! (我要断开连接了)
B: 你真的要走了吗? (我知道了)
B: 你真的真的要走了吗?(你断开连接了吗?)
A: 我真的要走了 (我断开连接了)
- 客户端和服务端的连接
- 传输完成,释放连接,效率低
- UDP: 发短信
- 不连接,不稳定
- 客户端与服务端没有明确界限
- 不管有没有准备好,都可以发送给你
(就好比导弹攻击;DDOS,洪水攻击)
2. TCP连接的java代码
[1] 客户端
1)连接服务器Socket
2) 发送消息
package com.gs.lesson02;
import java.io.IOException;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;
//服务端
public class TcpClientDemo01 {
public static void main(String[] args) {
Socket socket = null;
OutputStream os = null;
try {
// 1.要知道服务器的地址,端口号
InetAddress serverIp = InetAddress.getByName("127.0.0.1");
int port = 9999;
// 2. 创建一个socket连接
socket = new Socket(serverIp,port);
// 3.发送消息
os = socket.getOutputStream();
os.write("你好,欢迎学习网络编程".getBytes());
} catch (Exception e) {
e.printStackTrace();
}finally {
try {
//一般标准写法要判断是否为非空才执行关闭操作
os.close();
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
[2] 服务端
- 建立服务端口号 ServerSocket
- 等待用户连接 accept
- 接收用户的信息
package com.gs.lesson02;
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 is = null;
ByteArrayOutputStream baos = null;
try {
//1.我得有一个地址
serverSocket = new ServerSocket(9999);
// 2.等待客户端连接过来
socket = serverSocket.accept();
// 3.读取客户端的信息
is = socket.getInputStream();
//通过管道流进行相应的读取
baos = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int len;
while ((len=is.read(buffer))!=-1){
baos.write(buffer,0,len);
}
System.out.println(baos.toString());
} catch (IOException e) {
e.printStackTrace();
}finally {
//关闭资源
try {
baos.close();
is.close();
socket.close();
serverSocket.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
补充:我们的网络编程开发的形式如下:
服务端:
[1] 自定义Server
[2] Tomcat服务端(基于java后台开发)
客户端:
[1] 自定义Client
[2] 浏览器(Browser)
Tomcat其实就是我们典型的TCP协议===>我们后期的java后台开发其实就是B/S架构