兩臺電腦間檔案傳輸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) {
// 選擇進行傳輸的檔案
String filePath = "D:\\lib.rar";
File fi = new File(filePath);
System.out.println("檔案長度:" + (int) fi.length());
// public Socket accept() throws
// IOException偵聽並接受到此套接字的連線。此方法在進行連線之前一直阻塞。
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裡有現成的程式碼。
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();
// 注意關閉socket連結哦,不然客戶端會等待server的資料過來,
// 直到socket超時,導致資料不完整。
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;
}
/*
* 建立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";// 設定成伺服器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("連線伺服器成功!" + "\n");
return true;
} catch (Exception e) {
System.out.print("連線伺服器失敗!" + "\n");
return false;
}
}
private void sendMessage() {
if (cs == null)
return;
try {
cs.sendMessage(sendMessage);
} catch (Exception e) {
System.out.print("傳送訊息失敗!" + "\n");
}
}
private void getMessage() {
if (cs == null)
return;
DataInputStream inputStream = null;
try {
inputStream = cs.getMessageStream();
} catch (Exception e) {
System.out.print("接收訊息快取錯誤\n");
return;
}
try {
//本地儲存路徑,檔名會自動從伺服器端繼承而來。
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;
}
//下面進度條本為圖形介面的prograssBar做的,這裡如果是打檔案,可能會重複打印出一些相同的百分比
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程式設計原始碼
伺服器端 package sterning; import java.io.BufferedInputStream; import java.io.DataInputStream; import java.io.DataOutputStream; import java
兩臺電腦直連傳輸檔案的方法-飛秋
在對計算機硬碟重新分割槽或者在兩臺電腦之間進行資料轉移時,用U盤或者硬碟速度不夠快,最簡單的方法是兩臺計算機用網線直接相連,組成區域網,使用飛秋傳輸資料。 1、將兩臺電腦用網線連線 2、兩臺電腦分別裝上飛秋(如果一臺電腦上有多塊有線網絡卡,在飛秋-網路設定中應選擇正確的網
windows socket程式設計實現兩臺電腦間的通訊
首先需要兩臺電腦,可以兩個同學共同來完成;當然,如果自己有兩臺電腦的話就更好了! 在一臺電腦上建立一個TCP Socket伺服器應用程式 #define _CRT_SECURE_NO_WARNINGS #include <iostream> #include
兩臺電腦間大量數據拷貝的快捷方法
兩臺 電腦間 大量數據 可能大家會遇到需要將一臺電腦裏的數據拷貝到另外一臺電腦,最常用的方法是用u盤或移動硬盤等存儲設備來拷貝,這樣速度慢,而且可能拷貝多次才能將數據拷貝完。現提供一種方法,就是通過windows 的文件共享來實現。通過千兆網線直接連接兩臺電腦,再用軟件輔助,就可以快速提高拷貝速度
OneDrive兩臺電腦之間檔案同步操作
我們經常會遇到這樣的場景:辦公室電腦和個人電腦上的檔案需要進行同步。U盤、網盤都是可選方案,但是都需要編輯完後拷貝到這些介質中,然後再在另一臺機器上拷貝出來。有沒有更簡便的方法呢,摸索了一番後,發現Windows系統自帶的OneDrive使用起來更簡單。 OneDrive最大的優勢就是編輯完文件後,可以自動
同一網段兩臺電腦共享檔案
需要訪問D機器的檔案,所以在D電腦設定: 1、在D機器上,右鍵點‘網路上的芳鄰’,點屬性,然後點‘高階’--‘設定’,關閉防火牆,同時確定Guest使用者是開啟狀態,具體是右鍵點‘我的電腦’--管理--本地使用者和組---雙擊右面視窗的Guest使用者,然後把停用此賬戶前面的勾去掉。 新增
如何快速在兩臺電腦之間傳輸大檔案
兩臺電腦如何傳檔案最快方法。我們在使用電腦的時候,有的情況下需要我們隊兩臺電腦之間互相的傳輸大檔案。那麼我們應該通過什麼樣的方法傳輸最快速呢?我們一起來看看吧。 首先我們需要一根平時上網連線網路時用的網線。 網線的兩端分別連線在你的兩臺電腦網線插口處。 連線好了之
區域網內地兩臺電腦如何傳輸檔案
兩臺電腦都設定網路共享選項 控制面板\網路和 Internet\網路和共享中心\高階共享設定下面開啟網路發現和開啟檔案和印表機共享 PC1設定共享資料夾 (右鍵屬性\共享) pc2 通過 \pc1n
不用U盤,用一根網線在兩臺電腦之間傳輸檔案
有一次要給朋友傳一部電影恰好沒有帶U盤,而且又不能上網,不知道怎麼辦。後來就上網搜尋加自我摸索,總結了一些方法。只要你身邊有一條網線或者你們的電腦處在同一個局域網裡,就可以實現傳輸資料。下面是我總結的一些方法。 前提:用網線將兩臺電腦連線起來,並設定成同一個區域網(如把A
兩臺伺服器間的資料傳輸
命令:當前伺服器執行 scp -r /usr/local/test [email protected]目標伺服器公網ip:/home/app/PicAnalyser/ ps:加上-r引數直接拷貝整個資料夾(速度相當快)
Flume Avro 兩臺機器間進行資料傳輸的方式
flume 通過avro方式在兩臺機器之間進行資料傳輸 比如要在192.168.17.18 上把資料傳到 192.168.17.17 1 首先要再兩臺機器上都部署 flume 2 在 17 flume下這樣配置 avro-flume.conf agent3.channel
兩臺電腦之間如何收發檔案
如圖,在OSI參考模型中,當一臺主機需要傳送使用者的資料(DATA)時,資料首先通過應用層的介面進入應用層。在應用層,使用者的資料被加上應用層的報頭(Application Header,AH),形成應用層協議資料單元(Protocol Data Unit,PDU),然後被遞交到下一層-表示層。 表
兩臺Linux系統之間傳輸檔案的幾種方法
scp傳輸 當兩臺LINUX主機之間要互傳檔案時可使用SCP命令來實現 scp傳輸速度較慢,但使用ssh通道保證了傳輸的安全性 複製檔案 將本地檔案拷貝到遠端 scp 檔名 –使用者名稱@計算機I
【網路 】兩臺電腦之間如何收發檔案
一、在講解之前,咱們先準備一些理論知識 1、OSI七層模型(參考模型) OSI(Open System Interconnect),即開放式系統互聯。 一般都叫OSI參考模型,是ISO(國際
兩臺電腦在linux終端互傳檔案
假設我當前在使用的電腦是A,伺服器是B,那麼我們先要確認B的IP地址。假設B的IP是192.168.2.208 1、從服務端copy檔案到本地。比如伺服器的home下有一個檔案是a.txt,那麼命令是:scp [email protected]:/h
如何用一根網線實現在兩臺電腦之間傳輸資料
下面我來說一說怎樣用一根網線連線兩臺電腦,從而實現資料的傳輸。 首先,我們要在兩臺電腦上分別設定其IPv4的配置。 第一臺電腦的設定步驟如下: 開啟網路和共享中心 ,點選更改設配器設定,在乙太網那裡右鍵屬性, 雙擊Internet 協議版本4(TCP/I
自己的兩臺電腦,在局域網中,可以快速共享兩個電腦的文件,可以很方便操作。
帳戶 程序 設置 連接 啟動 臺電 即使 臺電腦 同時登錄 1.可以啟用遠程控制,讓A控制B。這樣比較方便。 2.在同一個局域網中,可以讓兩臺機器在局域網中,設置某些文件夾共享。這樣可以非常方便,而且這樣操作,A就像同時擁有A和B兩臺電腦的硬盤一樣。而且還可以同時操作兩臺電
5*.211.24*.27/29 防火墻下面直接接一個小交換機配兩臺電腦可以的 親自實驗
交換機 防火墻 兩臺電腦 5*.211.24*.27/29 共有6個可以上網的地址 25 26 27 28 29 30 防火墻下面直接接一個小交換機配兩臺電腦可以的 親自實驗本文出自 “宏宏在線” 博客,請務必保留此出處http://215363.blog.51cto.com/205363/1
兩臺電腦如何共享文件
ear 打開控制面板 -o sig cdb 雙擊 https audio 技術 有些在局域網的朋友想讓一臺電腦上的文件復制到另一臺電腦上,可是又沒有可移動設備不知道該怎麽辦,下面我給大家演示一下,一定按照步驟做哦 https://jingyan.baidu.com/arti
兩臺電腦可以互相傳送文件嗎
src ati 遊戲 就是 兩個人 重要 用戶 本地用戶和組 wifi 我們在更換新電腦的時候,發現舊電腦上還有一些重要的資料或者電影照片,甚至是遊戲,而且文件較大,甚至可達幾十GB,單純用U盤來挪動文件,是非常浪費時間的。今天小編就來教大家一下兩臺電腦如何相互連接傳送文件