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、传输速度比较慢,没有大小限制,数据比较安全