此demo的在上一个的基础上加入缓冲流读取,提高数据的读与取的效率,首先要先启动服务端,否则报错,因为TCP是可靠协议,所以没有对应的服务端时会报错,发送数据为图片
一.编写TCP协议服务端
1 package demo.soket.tcp; 2 ? 3 import java.io.BufferedInputStream; 4 import java.io.BufferedOutputStream; 5 import java.io.FileOutputStream; 6 import java.io.IOException; 7 import java.net.ServerSocket; 8 import java.net.Socket; 9 ? 10 //TCP协议服务端 11 public class Server { 12 public static void main(String[] args) { 13 /** 14 * 1.创建服务端ServerSocket对象 15 * 2.监听socket连接 16 * 3.通过返回的socket对象来获取io流里面的数据 17 * 4.打印数据 18 */ 19 //1. 20 ServerSocket server=null; 21 try { 22 server=new ServerSocket(11111); 23 //2. 24 Socket client=server.accept(); 25 //3. 26 //字节缓冲输入流,效率高 27 BufferedInputStream bis=new BufferedInputStream(client.getInputStream()); 28 BufferedOutputStream os=new BufferedOutputStream(new FileOutputStream("客户端发过来的图片.jpg")); 29 byte[] b=new byte[1024]; 30 int len=0; 31 while((len=bis.read(b))!=-1) { 32 os.write(b, 0, len); 33 os.flush();//刷出缓冲流中的数据,关闭连接前一定要刷,否则会数据缺失 34 } 35 //缓冲流 36 os.close(); 37 client.close(); 38 bis.close(); 39 server.close(); 40 } catch (IOException e) { 41 e.printStackTrace(); 42 } 43 } 44 }
?
二.编写TCP协议客服端
1 package demo.soket.tcp; 2 ? 3 import java.io.BufferedInputStream; 4 import java.io.BufferedOutputStream; 5 import java.io.FileInputStream; 6 import java.io.IOException; 7 import java.net.Socket; 8 import java.net.UnknownHostException; 9 ? 10 /** 11 * TCP特点: 12 * 1.建立连接,形成传输数据的通道 13 * 2.在链接中进行大量数据传输 14 * 3.通过三次握完成连接,是可靠协议,所以没有对应的服务端时会报错 15 * 4.必建立连接,效率会稍低些 16 * @author Administrator 17 * 18 */ 19 public class Client { 20 public static void main(String[] args) { 21 /** 22 * 1.创建一个客服端的socket对象 23 * 2.建立连接 24 * 3.通过io流在管道里面传输数据 25 * 写数据:输出流 getOutputStream() 26 * 接收数据:输入流 getInputStream() 27 * 4.关闭socket 28 */ 29 //1.|2. 30 Socket client=null; 31 try { 32 client=new Socket("192.168.95.2",11111); 33 //3. 34 BufferedOutputStream os=new BufferedOutputStream(client.getOutputStream()); 35 String path="C:\\Users\\Administrator\\Pictures\\微信图片_20200629170031.jpg"; 36 BufferedInputStream buf=new BufferedInputStream(new FileInputStream(path)); 37 byte[] b=new byte[1024]; 38 int len=0; 39 while((len=buf.read(b))!=-1) { 40 os.write(b, 0, len); 41 os.flush();//关闭连接前一定要刷,否则会数据缺失 42 } 43 //关闭读文件操作 44 buf.close(); 45 os.close(); 46 } catch (UnknownHostException e) { 47 e.printStackTrace(); 48 } catch (IOException e) { 49 e.printStackTrace(); 50 }finally { 51 //4. 52 if(client!=null) { 53 try { 54 client.close(); 55 } catch (IOException e) { 56 e.printStackTrace(); 57 } 58 } 59 } 60 } 61 }
?
三 .demo运行
刷新项目后会多一张上传的图片