Socket编程(利用流)TCP CS通信 客户端发送视频 服务端接收视频存到服务器

tech2024-07-26  45

Socket编程(套接字编程)

在TCP通信协议下,能实现两台计算机之间的数据交互,并且它们要严格区分客户端(Client)与服务端 (Server) 客户端和服务端通信的步骤:

服务端先进行启动,并占用一个指定的端口号,等待客户端的连接客户端主动发起服务端的连接,在连接成功之后,就可以进行数据发送了

注意,在整个过程中,服务端不能主动连接客户端,必须由客户端先行发起连接才行

在java中,对于这样基于TCP协议下连接通信的客户端和服务端,分别进行了抽象:

java.net.Socket 类表示客户端java.net.ServerSocket 类表示服务端

客户端

public static void main(String[] args) throws UnknownHostException, IOException { // 创建客户端 连接 服务器的ip 和 端口 Socket socket = new Socket("127.0.0.1",8888); // 得到网络字节的输出流 主要用来输出数据到服务器 OutputStream os = socket.getOutputStream(); // 将网络字节的输出流包裹进 缓冲输出流中,使用效率更高的方法进行传输 BufferedOutputStream pw = new BufferedOutputStream(os); //假设进行一个视频数据的传输 //首先将视频数据获取到客户端中 再从客户端输出到服务器 BufferedInputStream bis = new BufferedInputStream(new FileInputStream("2.今日内容.mp4"));// 将项目底下2.今日内容视频用文件输入流获取 int a=0; //将视频数据一个一个读到a中,再一个一个的传入到客户端的输出流,输出到服务端 while((a=bis.read())!=-1) { pw.write(a); } //将流中还未写入的字节强制写入 pw.flush(); //关闭网络客户端 socket.close(); }

服务器端

public static void main(String[] args) throws Exception { // 创建服务端 服务端使用的端口是8888 ServerSocket ss = new ServerSocket(8888); //阻塞,只有收到客户端传数据过来之后才会继续往下执行 Socket socket = ss.accept(); // 获得客户端传来的数据,通过输入流输入到服务端 InputStream ips = socket.getInputStream(); //同样的用缓冲区来获取数据 BufferedInputStream stream = new BufferedInputStream(ips); // 创建文件输出流 用来将服务端获取的数据 输出到这个文件中 FileOutputStream file = new FileOutputStream("拷贝.mp4"); int line = 0; //从服务器中一个一个读取数据 while ((line = stream.read())!=-1) { // 拷贝时间可能很长,用一个简单的字符来观察是否正在传输数据,以及观察是否传输完成。 System.out.println("---"); //将读取的数据一个一个写入文件中 file.write(line); }
最新回复(0)