開發工具與關鍵技術:IDEA Java
撰寫時間:2021/8/10
講解一下兩臺電腦之間通過java代碼傳輸視頻檔案(在有網路的情況下),我通過TCP協議來完成操作 ,TCP協議要明確哪一臺電腦是服務端,哪一臺是客戶端,服務端負責發送資料,客戶端負責接收資料,
一.我首先說客戶端的代碼怎么寫代碼圖如下
public class ClientDome {
public static void main(String[] args) throws
IOException {
//這里是客戶端
Socket s = new Socket("127.0.0.1", 10001);
//使用位元組緩沖流接收資料
//服務器輸出資料 ,客戶端接收資料保存到資料庫中
BufferedInputStream bis=new BufferedInputStream(s.getInputStream());
BufferedOutputStream bos=new BufferedOutputStream(new FileOutputStream("shiping.mp4"));
byte[] bytes=new byte[8192];
int len;
while ((len=bis.read(bytes))!=-1){
bos.write(bytes,0,len);
bos.flush();
}
BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
//輸出 反饋給服務器
bw.write("我已接收到視頻檔案");
bw.flush();
bos.close();
s.close();
}
}
首先我定義了一個Socket類傳入兩個引數明確服務端的IP地址和埠,然后使用位元組緩沖流接收資料,然后把資料讀取到當前專案中,所以路徑前綴我不需要寫了,使用一個位元組一個位元組陣列的方法讀取資料,讀取完資料以后,要將資訊反饋給服務器,表示已經讀取完資料,最后關閉流釋放資源,
- 我再來說一下服務端的代碼怎么寫如圖下所示,首先我實體化了ServerSocket類,使用有參構造方法,引數是端點,然后我用這個類的實體化物件ss去呼叫監聽方accept回傳
public class ServerDome {
public static void main(String[] args) throws
IOException {
//服務器接收資料
ServerSocket ss=new ServerSocket(10001);
Socket s=ss.accept();
//讀取視頻檔案 讀取 當前類檔案路徑下的視頻檔案
BufferedInputStream bis=new BufferedInputStream
(ServerDome.class.getClassLoader().getResourceAsStream("Cyberpunk 2077.mp4"));
BufferedOutputStream bos=new BufferedOutputStream(s.getOutputStream());
byte[] bytes=new byte[8192];
int len;
while ((len=bis.read(bytes))!=-1){
bos.write(bytes,0,len);
bos.flush();
}
s.shutdownOutput();
BufferedReader br=new BufferedReader(new InputStreamReader(s.getInputStream()));
//輸出 資料
System.out.println("客戶端:"+br.readLine());
bis.close();
s.close();
}
}
一個Socket物件用s宣告該回傳值,然后首先我用位元組緩沖輸入流讀取到當前這個測驗類的根檔案路徑下的視頻檔案,讀取的同時用位元組緩沖輸出輸出資料給客戶端,輸出完畢之后一定要用 s呼叫 shutdownOutput()方法,關閉TCP套接字字符輸出流,如果不關閉這里一直會等待資料讀取然后輸出,然后客戶端一邊也會一直在等待接收資料,然后就卡在這里了,
最后接收客戶端的反饋輸出到控制臺中,并且關閉流和服務端,釋放資源,
最后我在我自己的電腦上給自己的傳輸檔案,在同一臺電腦上執行這個操作,首先打服務端,然后再打開客戶端,結果如下

如果你想嘗試一下傳輸檔案最好拉上自己的好友一起嘗試,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/294917.html
標籤:其他
