国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

Java基于Socket的文件傳輸實現(xiàn)方法

2019-11-26 14:47:32
字體:
供稿:網(wǎng)友

本文實例講述了Java基于Socket的文件傳輸實現(xiàn)方法。分享給大家供大家參考,具體如下:

1. Java代碼如下:

package sterning;import java.io.BufferedInputStream;import java.io.DataInputStream;import java.io.DataOutputStream;import java.io.File;import java.io.FileInputStream;import java.net.ServerSocket;import java.net.Socket;public class ServerTest { int port = 8821; void start() {  Socket s = null;  try {   ServerSocket ss = new ServerSocket(port);   while (true) {    // 選擇進(jìn)行傳輸?shù)奈募?   String filePath = "D://lib.rar";    File fi = new File(filePath);    System.out.println("文件長度:" + (int) fi.length());    // public Socket accept() throws    // IOException偵聽并接受到此套接字的連接。此方法在進(jìn)行連接之前一直阻塞。    s = ss.accept();    System.out.println("建立socket鏈接");    DataInputStream dis = new DataInputStream(new BufferedInputStream(s.getInputStream()));    dis.readByte();    DataInputStream fis = new DataInputStream(new BufferedInputStream(new FileInputStream(filePath)));    DataOutputStream ps = new DataOutputStream(s.getOutputStream());    //將文件名及長度傳給客戶端。這里要真正適用所有平臺,例如中文名的處理,還需要加工,具體可以參見Think In Java 4th里有現(xiàn)成的代碼。    ps.writeUTF(fi.getName());    ps.flush();    ps.writeLong((long) fi.length());    ps.flush();    int bufferSize = 8192;    byte[] buf = new byte[bufferSize];    while (true) {     int read = 0;     if (fis != null) {      read = fis.read(buf);     }     if (read == -1) {      break;     }     ps.write(buf, 0, read);    }    ps.flush();    // 注意關(guān)閉socket鏈接哦,不然客戶端會等待server的數(shù)據(jù)過來,    // 直到socket超時,導(dǎo)致數(shù)據(jù)不完整。        fis.close();    s.close();        System.out.println("文件傳輸完成");   }  } catch (Exception e) {   e.printStackTrace();  } } public static void main(String arg[]) {  new ServerTest().start(); }}

2.socket的Util輔助類

package sterning;import java.net.*;import java.io.*;public class ClientSocket { private String ip; private int port; private Socket socket = null; DataOutputStream out = null; DataInputStream getMessageStream = null; public ClientSocket(String ip, int port) {  this.ip = ip;  this.port = port; } /** *//**  * 創(chuàng)建socket連接  *   * @throws Exception  *    exception  */ public void CreateConnection() throws Exception {  try {   socket = new Socket(ip, port);  } catch (Exception e) {   e.printStackTrace();   if (socket != null)    socket.close();   throw e;  } finally {  } } public void sendMessage(String sendMessage) throws Exception {  try {   out = new DataOutputStream(socket.getOutputStream());   if (sendMessage.equals("Windows")) {    out.writeByte(0x1);    out.flush();    return;   }   if (sendMessage.equals("Unix")) {    out.writeByte(0x2);    out.flush();    return;   }   if (sendMessage.equals("Linux")) {    out.writeByte(0x3);    out.flush();   } else {    out.writeUTF(sendMessage);    out.flush();   }  } catch (Exception e) {   e.printStackTrace();   if (out != null)    out.close();   throw e;  } finally {  } } public DataInputStream getMessageStream() throws Exception {  try {   getMessageStream = new DataInputStream(new BufferedInputStream(socket.getInputStream()));   return getMessageStream;  } catch (Exception e) {   e.printStackTrace();   if (getMessageStream != null)    getMessageStream.close();   throw e;  } finally {  } } public void shutDownConnection() {  try {   if (out != null)    out.close();   if (getMessageStream != null)    getMessageStream.close();   if (socket != null)    socket.close();  } catch (Exception e) {  } }}

3.客戶端

package sterning;import java.io.BufferedOutputStream;import java.io.DataInputStream;import java.io.DataOutputStream;import java.io.FileOutputStream;public class ClientTest { private ClientSocket cs = null; private String ip = "localhost";// 設(shè)置成服務(wù)器IP private int port = 8821; private String sendMessage = "Windwos"; public ClientTest() {  try {   if (createConnection()) {    sendMessage();    getMessage();   }  } catch (Exception ex) {   ex.printStackTrace();  } } private boolean createConnection() {  cs = new ClientSocket(ip, port);  try {   cs.CreateConnection();   System.out.print("連接服務(wù)器成功!" + "/n");   return true;  } catch (Exception e) {   System.out.print("連接服務(wù)器失敗!" + "/n");   return false;  } } private void sendMessage() {  if (cs == null)   return;  try {   cs.sendMessage(sendMessage);  } catch (Exception e) {   System.out.print("發(fā)送消息失敗!" + "/n");  } } private void getMessage() {  if (cs == null)   return;  DataInputStream inputStream = null;  try {   inputStream = cs.getMessageStream();  } catch (Exception e) {   System.out.print("接收消息緩存錯誤/n");   return;  }  try {   //本地保存路徑,文件名會自動從服務(wù)器端繼承而來。   String savePath = "E://";   int bufferSize = 8192;   byte[] buf = new byte[bufferSize];   int passedlen = 0;   long len=0;   savePath += inputStream.readUTF();   DataOutputStream fileOut = new DataOutputStream(new BufferedOutputStream(new BufferedOutputStream(new FileOutputStream(savePath))));   len = inputStream.readLong();   System.out.println("文件的長度為:" + len + "/n");   System.out.println("開始接收文件!" + "/n");   while (true) {    int read = 0;    if (inputStream != null) {     read = inputStream.read(buf);    }    passedlen += read;    if (read == -1) {     break;    }    //下面進(jìn)度條本為圖形界面的prograssBar做的,這里如果是打文件,可能會重復(fù)打印出一些相同的百分比    System.out.println("文件接收了" + (passedlen * 100/ len) + "%/n");    fileOut.write(buf, 0, read);   }   System.out.println("接收完成,文件存為" + savePath + "/n");   fileOut.close();  } catch (Exception e) {   System.out.println("接收消息錯誤" + "/n");   return;  } } public static void main(String arg[]) {  new ClientTest(); }}

希望本文所述對大家Java程序設(shè)計有所幫助。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 耿马| 六盘水市| 华坪县| 襄城县| 阿城市| 勐海县| 鹤山市| 淄博市| 宁南县| 江西省| 南川市| 南涧| 通山县| 县级市| 桃园市| 沙洋县| 乐山市| 南昌县| 洛川县| 都江堰市| 横山县| 奉新县| 苏州市| 元氏县| 昭通市| 湖州市| 武山县| 老河口市| 堆龙德庆县| 怀来县| 翁源县| 兴仁县| 富蕴县| 临城县| 陕西省| 芮城县| 博白县| 庄浪县| 东至县| 自治县| 长沙县|