客戶端
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(); } }
先運行服務端
再運行客戶端
然后返回服務端