新手学习-网络编程之TCP传输文件

网络编程之TCP传输文件

上一篇《网络编程之TCP实现聊天》已经简单介绍了TCP的概念及三次握手、四次挥手的通俗理解方式,这里不再赘述,仅展示Java网络编程中的使用TCP协议实现传输文件。

代码中:

"D:\Program Files\ideaIU\IdeaWorkspace\网络编程\girl.jpg" //即将被传输的文件的绝对路径
"received.jpg"  //接收到文件时将其命名为这个名称

完整源码如下:

客户端
package tcp;

import java.io.*;
import java.net.InetAddress;
import java.net.Socket;

public class FilesClient {
   public static void main(String[] args) throws Exception {

       //创建Socket连接
       InetAddress byName = InetAddress.getByName("127.0.0.1");
       int port = 9000;
       Socket socket = new Socket(byName,port);

       //创建输出流
       OutputStream outputStream = socket.getOutputStream();

       //读取文件
       FileInputStream fileInputStream = new FileInputStream(new File("D:\Program Files\ideaIU\IdeaWorkspace\网络编程\girl.jpg"));

       //写出文件
       byte[] buffer = new byte[2014];
       int length;
       while ((length=fileInputStream.read(buffer))!=-1){
           outputStream.write(buffer,0,length);
      }

       //告诉服务器已经结束
       socket.shutdownOutput();

       //确定服务器接收完毕 才能断开连接
       InputStream inputStream = socket.getInputStream();
           //服务器发过来的是Byte[]
       ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
       byte[] bytes = new byte[2014];
       int len;
       while ((len=inputStream.read(bytes))!=-1){
           byteArrayOutputStream.write(bytes,0,len);
      }
       System.out.println(byteArrayOutputStream.toString());


       //关闭资源
       byteArrayOutputStream.close();
       inputStream.close();
       fileInputStream.close();
       outputStream.close();
       socket.close();
  }
}

 

服务端
package tcp;

import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;

public class FilesServer {
   public static void main(String[] args) throws Exception {
       //创建服务
       ServerSocket serverSocket = new ServerSocket(9000);

       //监听客户端的连接
       Socket accept = serverSocket.accept();  //阻塞式监听,会一直等待客户端的连接

       //获取输入流
       InputStream inputStream = accept.getInputStream();

       //文件输出
       FileOutputStream fileOutputStream = new FileOutputStream(new File("received.jpg"));
       int len;
       byte[] bytes = new byte[2014];
       while ((len=inputStream.read(bytes))!=-1){
           fileOutputStream.write(bytes,0,len);
      }

       //通知客户端接收完毕了
       OutputStream outputStream = accept.getOutputStream();
       outputStream.write("我结束了,你可以断开了!".getBytes());

       //关闭资源
       fileOutputStream.close();
       inputStream.close();
       accept.close();
       serverSocket.close();
  }
}

 

原文地址:https://www.cnblogs.com/awong18/p/13114562.html