使用TCP發送文件


客戶端

package com.zy.demo3;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;

public class TCPClient {

    public static void main(String[] args) throws Exception {//客戶端
        // 1創建socket對象
        
        Socket socket = new Socket("localhost", 6666);//Socket(String host, int port) 創建流套接字並將其連接到指定主機上的指定端口號。 host寫Ip和主機名都可以

        //2得到輸出流
        OutputStream outputStream = socket.getOutputStream();
        
        
        //3發送數據給服務端
        
        //讀取主機上的文件
        //按文件流的方式,先讀入內存,在寫出去[邊讀編寫]
        FileInputStream fileInputStream = new FileInputStream(new File("E:\\彈性表達式.doc"));//本地文件
        byte b[]=new byte[1024];
        int read = fileInputStream.read(b);    
        while(read!=-1){ //-1表示讀到末尾了    
            outputStream.write(b);
            read=fileInputStream.read(b);
        }
        //-----------------------------
        //接收響應
        InputStream inputStream = socket.getInputStream();
        byte re[]=new byte[1024];
        inputStream.read(re);
        System.out.println("接收的響應是:"+new String(re).trim());
        

        
        //4關閉資源
        outputStream.close();
        socket.close();
    
    
    }

}

服務端

package com.zy.demo3;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class TCPServer {//服務端

    public static void main(String[] args) throws Exception {
        //基於流
        //1創建serversocket對象
        ServerSocket serverSocket = new ServerSocket(6666);//端口約定6666
        
        //2獲取socket對象(客戶端)
        Socket accept = serverSocket.accept();//阻塞,即打開服務端后程序會運行到這一行,虛擬燈不滅,等待客戶端發送數據
        
        //3得到輸入流
        InputStream inputStream = accept.getInputStream();
    
        
        //----------------
        //響應(必須先響應再接收文件,否則客戶端和服務端都在阻塞着,虛擬燈一直亮着)
        OutputStream outputStream = accept.getOutputStream();
        outputStream.write("服務端已接收完畢,謝謝客戶端".getBytes());
        //---------------------
        
        //4讀取客戶端發送數據
        //將讀取的數據存到本機文件
        File file = new File("E:\\接收的文件\\1.doc");//接收的文件
        File parentFile = file.getParentFile();
        if (!parentFile.exists()) {
            parentFile.mkdirs();    
        }
        file.createNewFile();
        FileOutputStream fileOutputStream = new FileOutputStream(file);
        
        byte b[]=new byte[1024];
        int read = inputStream.read(b);//返回所占字節數(和FileInputStream一樣,讀取完畢時也返回-1)
        //邊讀編寫
        while(read!=-1){     
            fileOutputStream.write(b);
            read=inputStream.read(b);
        }
        
        System.out.println("接收完畢");

        
        //5關閉資源
        
        accept.close();
        serverSocket.close();
    }

}

 先運行服務端

再運行客戶端

然后返回服務端


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM