Android—Socket中關閉IO流後導致Socket關閉不能再收發數據的解決辦法

来源:http://www.cnblogs.com/yunfang/archive/2016/04/22/5420067.html
-Advertisement-
Play Games

以Socket發送數據為例: 發送數據時候要聲明:DataOutputStream os = new DataOutputStream(socket.getOutputStream()); 最近開發遇到的為題是我要向服務端發送圖片,如果os.close()的話伺服器可以收到圖片但是我客戶端的sock ...


以Socket發送數據為例:

      發送數據時候要聲明:DataOutputStream os = new DataOutputStream(socket.getOutputStream());

      最近開發遇到的為題是我要向服務端發送圖片,如果os.close()的話伺服器可以收到圖片但是我客戶端的socket會受影響關閉。如果不用os.close()的話,伺服器接收圖片會有影響,查資料說調用socket.shutdownOutputStream();可以關閉輸出流,而且不會影響socket發送數據。

      但是問題來了:DataOutputStream關閉了,但是客戶端還要繼續發送數據怎樣打開DataOutputStream呢?

      本人沒有百度到合適的回答,所以再次發送數據的時候先判斷一下輸出流有沒有被關閉,如果被關閉的話,就再new一個Soket。。。。(個人感覺這個方法不雖然解決了當前的問題,但不是最好的,如果大家有更好的解決方案,請留言,不勝感激!!!!)

 

public void sendObject(String obj) throws IOException {
		//判斷輸出流是否已經關閉,如果關閉就重新new Socket
		if (socket.isOutputShutdown()) {
			socket = new Socket(SERVERIP, PORT);
		}
		DataOutputStream os = new DataOutputStream(socket.getOutputStream());
		// os.write(obj.getBytes());
		os.writeUTF(obj);
		os.flush();
		System.out.println("客戶端發送" + obj + "到伺服器");
	}

 

 如果有好的方法,感謝留言!!!

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1/javascript誕生/作用 javascript誕生於:1995年 當時作用:客戶端數據驗證 開發公司:Netscape 發展至今:各種交互(包括於瀏覽器),數據驗證,單頁面應用,非同步載入... 2/javascript組成 ECMAScript(核心),DOM(文檔對象模型),BOM(瀏覽 ...
  • × 目錄 [1]定義 [2]關鍵幀 [3]動畫屬性 [4]多值 [5]API 前面的話 transition過渡是通過初始和結束兩個狀態之間的平滑過渡實現簡單動畫的;而animation則是通過關鍵幀@keyframes來實現更為複雜的動畫效果。本文將介紹關於animation動畫的相關知識 定義 ...
  • <script type="text/javascript"> var refid='dasdasd,dadsad'; var reg =/^([\u0391-\uFFE5\d\w,])*([\u0391-\uFFE5\d\w]+)$/; if(refid != "") { if(reg.exec( ...
  • 之前學習 react+webpack ,偶然路過 webpack 官網 ,看到頂部的 LOGO ,就很感興趣。 最近覺得自己 CSS3 過於薄弱,想著深入學習一番,遂以這個 LOGO 為切入口,好好研究學習了一下相關的 CSS3 屬性。webpack 的 LOGO 動畫效果乍看不是很難,深入瞭解之後 ...
  • ...
  • AngularJS HTML DOM AngularJS為HTML DOM 元素的屬性提供了綁定應用數據的指令。 ng-disabled指令 ng-disabled指令直接綁定應用數據到HTML的disabled屬性。 實例: <div ng-app="" ng-init="mySwitch=tru ...
  • github下載地址:https://github.com/CoderMJLee/MJRefresh MJRefresh類結構圖 下拉刷新控制項的種類 預設(Normal):MJRefreshNormalHeader 動圖(Gif):MJRefreshGifHeader 上拉刷新控制項的種類 自動刷新( ...
  • 在第5講中已經介紹瞭如何定義類和創建並初始化對象,比如有Student這個類1.Student.h 1 #import <Foundation/Foundation.h> 2 3 @interface Student : NSObject { 4 int _age; 5 } 6 - (void)se ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...