新手学习-网络编程之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();
    }
}
 
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号