2012-09-18 118 views
0

我正在與Android.Net(C#)合作。我想通過TCP socket將一些圖像(PNG)從Android發送到PC,但PC總是隻接收1張圖像。請幫幫我!通過TCP發送多個圖像?

的Android代碼(此代碼是一個方法裏面,我把它稱爲多次):

outputStream = socket.getOutputStream(); 
    File f = new File(filePath); 

    byte[] buffer = new byte[(int) f.length()]; 
    FileInputStream fis = new FileInputStream(f); 
    BufferedInputStream bis = new BufferedInputStream(fis); 
    bis.read(buffer, 0, buffer.length); 
    outputStream.write(buffer, 0, buffer.length); 
    outputStream.flush(); 
    outputStream.close(); 

C#代碼(我也把這個代碼很多次也讓圖像):

Socket s = 
     new Socket(
     AddressFamily.InterNetwork, 
     SocketType.Stream, 
     ProtocolType.Tcp); 
    s.Connect(new IPEndPoint(IPAddress.Parse(txtIPAddress.Text), 8002)); 
    Bitmap bitmap = new Bitmap(new NetworkStream(s)); 

UPDATE:我的Android應用程序將需要截屏的時間按時間,然後傳輸到PC代理查看。因此,爲每個捕獲的圖像創建一個單獨的套接字會帶來不便。對?

+0

你的意思是你創建/建立新的套接字連接發送每個圖像? –

+0

也許你可以用http POST發送你的圖像,並且簡單輕便。 –

+0

我不想爲每個圖像創建新的套接字。我只想使用一個套接字來傳輸它們。 –

回答

1

您目前的設計可能只處理一張圖片。 請設計你的協議格式。 例如,

沒有。 (4字節),長度1(4字節),圖像數據1(N1字節),長度2,圖像數據2(N2字節),...,長度n(4字節),圖像數據n(Nn字節)

0

您只是一次向流中寫入一個圖像並關閉它。根據提示android發送圖像的方式,您可能會啓動該過程並且只會一次又一次地寫入相同的第一張圖像。

你可以嘗試linquize的解決方案,併發送一個大的響應,你可以嘗試添加某種類型的變量告訴android要寫哪個圖像。那麼你應該能夠將每個圖像作爲一個單獨的寫入。

+0

我只是關閉outputSteam。我保持套接字連接活着。這是一個問題嗎? –

+0

我不確定,但我認爲PC代碼正在嘗試讀取套接字中的所有內容,並且只能獲得一次寫入。如果你保持socket打開並從android寫入,然後從PC讀取,然後重複它應該工作。你嘗試過那樣的事嗎? – BlargleMonster

+1

@NguyenMinhBinh你並沒有保持套接字的連接。關閉輸入或輸出流會關閉另一個流和套接字,然後關閉連接。 – EJP