TCP协议的特点
面向连接的协议(有发送端就一定要有接收端)
通过三次连接握手建立连接
通过四次握手断开连接
基于IO流传输数据
传输数据大小没有限制
速度慢但可靠
TCP协议相关的两个类
Socket(一个socket对象表示一个客户端对象)
常用构造方法介绍
Socket(String host, int port)
host参数为服务器的ip地址字符串
port参数为服务器的端口号
大家记忆的时候可以使用这一种记忆方式 :记住socket是个客户端对象就可以了,参数就想socket对象既然是客户端对象他就需要连接服务器,那么他需要什么呢,连接服务器肯定需要服务端的IP和地址才能够连接。
常用方法介绍
OutputStream getOutputStream() 获取字节输出流(该字节输出可以向服务端输出数据,只能获取一次,调用该方法多少次,获取到的还是同一个对象) InputStream getInputStream() 获取字节输入流(该字节输入流可以读取服务器端方式过来的数据,只能获取一次,调用该方法多少次,获取到的还是同一个对象) void shutdownOutputStream() 关闭输出流(在socket里面作用就是告诉服务器端,数据已经传输完成,调用该方法以后获取到的输出流就不能使用了) void close() 关闭资源 int getPort() 获取服务器端的端口 InetAddress getInetAddress()
获取服务器端的IP地址对象
ServerSocket(一个该类对象就代表一个服务端对象)
常用构造方法介绍
ServerSocket(int port)
port参数为服务端的端口号
常用方法介绍
Socket accept() 等待客户端连接,获取一个客户端对象 InteAddress getInteAdderss() 获取连接的客户端的ip对象
TCP协议实现服务端和客户端文件上传代码
客户端代码
//创建客户端对象 设置要连接服务器的ip 和服务器的端口 Socket socket = new Socket("127.0.0.1", 8888); //创建inputStream读取本地文件 FileInputStream fileInputStream = new FileInputStream("C:\\aaa\\aaa.jpg"); //通过客户端对象获得输出流 可以输出数据服务端 OutputStream outputStream = socket.getOutputStream(); //通过客户端对象获取输入流对象可以读取服务端发送过来的数据 InputStream inputStream = socket.getInputStream(); //获取ip地址对象 InetAddress inetAddress = socket.getInetAddress(); System.out.println("已连接到服务器:"+inetAddress.getHostName()); //------------------io流读取文件部分 int len = 0; byte[] bs = new byte[1024]; //读取本地文件 while ( (len = fileInputStream.read(bs))!= -1){ //输出到服务器 outputStream.write(bs,0,len); } //格式服务器端 客户端数据已经传输完毕 socket.shutdownOutput(); System.out.println("文件上传已完成,等待服务器返回成功信息....."); //创建字节数组保存服务器发送过来的数据 byte[] bytes = new byte[1024]; //读取服务端发送过来的数据 int length = inputStream.read(bytes); //输出到控制台 System.out.println(new String(bytes,0,length)); //关闭资源 fileInputStream.close(); socket.close();
服务端代码
//创建服务端对象 设置服务端端口 ServerSocket serverSocket = new ServerSocket(8888); System.out.println("服务器已经启动。。。。。。。"); //等待客户端连接 获取客户端对象 Socket socket = serverSocket.accept(); //获取输入和输出流 用来读取和输出数据到客户端 OutputStream outputStream = socket.getOutputStream(); InputStream inputStream = socket.getInputStream(); //获取客户端ip地址对象 InetAddress inetAddress = socket.getInetAddress(); //新建输出流 保存客户端传输过来的数据 FileOutputStream fileOutputStream = new FileOutputStream("D:\\aaa\\aa.jpg"); System.out.println("客户端:"+inetAddress.getHostName()+" 已连接"); byte[] bytes = new byte[1024]; int length = 0; // 读取客户端传输过来的数据 while ((length=inputStream.read(bytes))!=-1){ //保存客户端文件数据到硬盘 fileOutputStream.write(bytes,0,length); } System.out.println("客户端上传文件成功。。。。"); //输出数据到客户端 提示客户端口文件传输成功 outputStream.write("恭喜你,文件上传成功。。。。".getBytes()); //关闭资源 fileOutputStream.close(); socket.close(); serverSocket.close();
java网络编程之TCP协议
最新推荐文章于 2022-12-07 20:58:32 发布