需要了解UDP协议的,可以看往期文章
https://flypeppa.blog.csdn.net/article/details/133273416
TCP/IP参考模型
代码案例
服务端代码
package com.hidata.devops.paas.udp;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;
/**
* @Description :
* @Date: 2023-09-25 15:21
*/
public class TCPserver {
public static void main(String[] args) throws IOException {
//TCP协议,服务端,接收数据
//1、创建服务端ServerSocket对象
ServerSocket serverSocket = new ServerSocket(10000);
//2、监听客户端的连接
Socket socket = serverSocket.accept();
//3、从连接通道中获取输入流读取数据
InputStream inputStream = socket.getInputStream();
int b;
while ((b = br.read()) != -1){
System.out.print((char)b);
}
//4、释放资源
socket.close();
serverSocket.close();
}
}
客户端代码
package com.hidata.devops.paas.udp;
import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;
/**
* @Description :
* @Date: 2023-09-25 15:21
*/
public class TCPclient {
public static void main(String[] args) throws IOException {
//TCP协议,客户端,发送数据
//1、创建socket对象,
//细节:在创建对象的同时,会连接服务器,如果连接不上,代码会报错
Socket socket = new Socket("127.0.0.1",10000);
//2、从连接通道中获取输出流对象
OutputStream os = socket.getOutputStream();
os.write("你好".getBytes());
//3、释放资源
os.close();
socket.close();
}
}
运行结果
发现服务端虽然接收到信息了,但是出现中文乱码了
解决中文乱码问题
思路:将字节流转为字符流,来解决中文乱码问题
只改造服务端代码
package com.hidata.devops.paas.udp;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;
/**
* @Description :
* @Date: 2023-09-25 15:21
*/
public class TCPserver {
public static void main(String[] args) throws IOException {
//TCP协议,服务端,接收数据
//1、创建服务端ServerSocket对象
ServerSocket serverSocket = new ServerSocket(10000);
//2、监听客户端的连接
Socket socket = serverSocket.accept();
//3、从连接通道中获取输入流读取数据
InputStream inputStream = socket.getInputStream();
//字节流转为字符流,解决中文乱码问题
InputStreamReader isr = new InputStreamReader(inputStream);
BufferedReader br = new BufferedReader(isr);
int b;
while ((b = br.read()) != -1){
System.out.print((char)b);
}
//4、释放资源
socket.close();
serverSocket.close();
}
}
运行结果
额外补充
1、TCP协议是面向连接的通信协议(通俗一点来说,就是传输之前,必须确保连接是成功的),正好与UDP协议相反,UDP协议是面向无连接的通信协议
2、传输速度比较慢,没有大小限制,数据比较安全