TCP通信协议
TCP通信协议是一种可靠的网络协议
它在通信的两端各建立一个Socket对象
通信之前要保持连接已经建立
通过Socket产生IO流来进行网络通信
代码实现
先运行服务端 再运行客户端
import java.io.IOException; import java.io.InputStream; import java.net.ServerSocket; import java.net.Socket; public class Server { public static void main(String[] args) throws IOException { //TCP协议 接收数据 //1.创建对象ServerSocker ServerSocket ss=new ServerSocket(10000); //2.监听客户端的连接 Socket socket=ss.accept(); //3.从连接通道中获取输入流读取数据 InputStream is=socket.getInputStream(); int b; while((b=is.read())!=-1) System.out.print((char) b); //4.释放资源 //断开与客户端的连接 socket.close(); //关闭服务器 ss.close(); } }
import java.io.IOException; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.net.Socket; public class Client { 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("Dduo".getBytes()); //3.释放资源 os.close(); socket.close(); } }
但是这种只能接收英文
接受中文会产生乱码
原因是IDE默认编码规则是UTF-8
所以每次转中文只是三分之一个中文
所以我们会接受到乱码
我的得把字节流变成字符流
运用转换流
运用缓冲流 提高效率
简写代码
一个套一个
TCP协议代码细节
accept方法底层会等客户端来连接
客户端底层会用三次握手协议来确保连接建立
读写都是IO流去实现的
这些流不是我们去创建的 而是在连接通道里面的
流可以关闭也可以不关闭
但是断开连接时还有四次挥手协议
利用这个协议断开连接
而且就可以保证连接通道里的数据已经处理完毕了
三次握手与四次挥手
三次握手是一个反复确认的过程
四次挥手是为了确保连接断开且数据处理完毕