我在傳送如下因素140KB的圖像文件通過網絡使用套接字麻煩:發送過使用套接字網絡圖像,搞砸數據
的文件的開頭被正確地轉移,那麼其餘被搞砸導致以下結果:
我有一個服務器,即等待文件和連接到服務器並啓動文件轉院的客戶端。當客戶端關閉連接時,服務器知道文件已經完成發送並保存。正在收集
全部在服務器端的數據字節列表(GLOBAL.FILE_BUFFER),寫入文件之前:
public void OnDataReceived(IAsyncResult asyn)
{
try
{
SocketPacket socketData = (SocketPacket)asyn.AsyncState;
int iRx = socketData.m_currentSocket.EndReceive(asyn);
for (int f = 0; f < iRx; f++)
{
GLOBAL.FILE_BUFFER.Add(socketData.dataBuffer[f]); // Collect all the incoming data into a buffer
}
WaitForData(socketData.m_currentSocket, socketData.socket_id, REQUEST_INDEX_ID);
}
catch (ObjectDisposedException)
{
}
catch (SocketException se)
{
}
}
這是我使用寫入文件的代碼:
public static void ByteArrayToFile(string _FileName, byte[] _ByteArray, int BytesRead)
{
System.IO.FileStream _FileStream = new System.IO.FileStream(_FileName, System.IO.FileMode.Create, System.IO.FileAccess.Write);
_FileStream.Write(_ByteArray, 0, BytesRead);
_FileStream.Close();
}
我在cient側使用了相同的ByteArrayToFile函數,它正確保存了圖像。看起來客戶端正在發送正確的數據,但是當服務器接收到它時,它會變得混亂。我在攻防兩端保存的文件,由客戶端和服務器,然後比較它們:
請注意,在底部中央的紫線/條。這表明,數據不匹配存在,但是請注意,在一開始完全吻合..
我不明白怎麼能這樣呢,因爲我使用的名單,只是不斷增加的字節列表,直到有沒有什麼可讀的!?如果你沒有解決方案,你可以給我任何提示嗎?!這個問題一直困擾着我好幾個星期,希望能夠把它弄清楚。謝謝!
你有沒有在你發送相同的圖像生成的字節[]字節[]數據驗證?發佈生成字節的代碼[] – 2012-03-06 19:26:50
@Ramhound對不起,我不確定你的意思。客戶端從Web上獲取圖像,然後將其上傳到服務器。當我從httpwebresponse的客戶端的字節列表中收集所有的數據時,我保存圖像,驗證它是否有效,並保存並運行。請讓我知道,如果這是你的問題。謝謝! – user1192403 2012-03-06 19:29:52