日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【java网络编程】用TCP socket实现多线程图片上传

發(fā)布時間:2024/9/30 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【java网络编程】用TCP socket实现多线程图片上传 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

  • 單線程上傳
    • 服務(wù)端:
    • 客戶端:
  • 多線程上傳
    • 修改服務(wù)端:
    • 修改客戶端

單線程上傳

服務(wù)端:

public static void main(String[] args) {try ( // 創(chuàng)建一個ServerSocket監(jiān)聽8080端口的客戶端請求ServerSocket server = new ServerSocket(8000); // 使用accept()阻塞當前線程,等待客戶端請求Socket socket = server.accept(); // 由Socket獲得輸入流,并創(chuàng)建緩沖輸入流BufferedInputStream in = new BufferedInputStream(socket.getInputStream()); // 由文件輸出流創(chuàng)建緩沖輸出流FileOutputStream out = new FileOutputStream("C:\\Users\\14172\\Pictures\\m66.png")) { // 準備一個緩沖區(qū)byte[] buffer = new byte[1024]; // 首次從Socket讀取數(shù)據(jù)int len = in.read(buffer);while (len != -1) { // 寫入數(shù)據(jù)到文件out.write(buffer, 0, len); // 再次從Socket讀取數(shù)據(jù)len = in.read(buffer);}System.out.println("接收完成!");} catch (IOException e) {e.printStackTrace();}}

客戶端:

/*** @Author he* @Description 測試Socket上傳文件的客戶端* @Date 8.22**/ public class UdpClient {public static void main(String[] args) {try ( // 向本機的8080端口發(fā)出請求Socket socket = new Socket("127.0.0.1", 8000);// 由Socket獲得輸出流,并創(chuàng)建緩沖輸出流BufferedOutputStream out = new BufferedOutputStream(socket.getOutputStream());// 創(chuàng)建文件輸入流FileInputStream fin = new FileInputStream("C:\\Users\\14172\\Pictures\\m11.png");// 由文件輸入流創(chuàng)建緩沖輸入流BufferedInputStream in = new BufferedInputStream(fin)) { // 準備一個緩沖區(qū)byte[] buffer = new byte[1024]; // 首次讀取文件int len = in.read(buffer);while (len != -1) { // 數(shù)據(jù)寫入Socketout.write(buffer, 0, len); // 再次讀取文件len = in.read(buffer);}System.out.println("上傳成功!");} catch (ConnectException e) {System.out.println("服務(wù)器未啟動!");} catch (IOException e) {e.printStackTrace();}}}

查看文件:

可以看到自己的目錄下已經(jīng)出現(xiàn)了C:\Users\14172\Pictures\m66.png

多線程上傳

改成多線程的形式:

修改服務(wù)端:

public class isStream {public static void main(String[] args)throws Exception {ServerSocket server = new ServerSocket(8000);// 創(chuàng)建一個ServerSocket監(jiān)聽8080端口的客戶端請求 // 使用accept()阻塞當前線程,等待客戶端請求while (true) //(2)開始在這里暫停等待接收客戶端的連接,得到一個端到端的Socket管道{Socket socket = server.accept();new ServerReadThread(socket).start();}}class ServerReadThread extends Thread {static int number = 0;private Socket socket;public ServerReadThread(Socket socket) {this.socket = socket;} @Overridepublic void run(){ try( // 由Socket獲得輸入流,并創(chuàng)建緩沖輸入流BufferedInputStream in = new BufferedInputStream(socket.getInputStream()); // 由文件輸出流創(chuàng)建緩沖輸出流FileOutputStream out = new FileOutputStream("C:\\Users\\14172\\socket\\"+number+".png")) {number++; // 準備一個緩沖區(qū)byte[] buffer = new byte[1024]; // 首次從Socket讀取數(shù)據(jù)int len = in.read(buffer);while (len != -1) { // 寫入數(shù)據(jù)到文件out.write(buffer, 0, len); // 再次從Socket讀取數(shù)據(jù)len = in.read(buffer);System.out.println("接收完成!");}} catch (FileNotFoundException fileNotFoundException) {fileNotFoundException.printStackTrace(); } catch (IOException ioException) {ioException.printStackTrace(); }} }

查看結(jié)果:

修改客戶端

修改為用戶輸入圖片路徑,進行多次上傳圖片:

public class UdpClient {public static void main(String[] args) throws IOException {int num = 0;Socket socket = new Socket("127.0.0.1", 8000);// 由Socket獲得輸出流,并創(chuàng)建緩沖輸出流BufferedOutputStream out = new BufferedOutputStream(socket.getOutputStream());Scanner scanner = new Scanner(System.in);// 創(chuàng)建文件輸入流while (true) {num++;try ( // 向本機的8080端口發(fā)出請求//System.out.println("輸入文件路徑:");FileInputStream fin = new FileInputStream(scanner.nextLine());// 由文件輸入流創(chuàng)建緩沖輸入流BufferedInputStream in = new BufferedInputStream(fin)) { // 準備一個緩沖區(qū)byte[] buffer = new byte[1024]; // 首次讀取文件int len = in.read(buffer);while (len != -1) { // 數(shù)據(jù)寫入Socketout.write(buffer, 0, len); // 再次讀取文件len = in.read(buffer);}System.out.println("上傳成功!");} catch (ConnectException e) {System.out.println("服務(wù)器未啟動!");} catch (IOException e) {e.printStackTrace();} if(num == 5) break;}}}


查看目錄:

發(fā)現(xiàn)一個小問題:已經(jīng)存在的一樣的命名的圖片不會覆蓋
然后有的圖片傳過去之后格式會損壞,貌似是jpg轉(zhuǎn)為png命名的時候

總結(jié)

以上是生活随笔為你收集整理的【java网络编程】用TCP socket实现多线程图片上传的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。