我試圖從客戶端發送文件到服務器,所以我加載文件在客戶端的一個字節數組,並將其發送到服務器槽發送()的方法,但所接收到的陣列是不同的,比發送的陣列更大,不知是否它是一個協議的問題(但是我使用TCP協議至極保證錯誤檢測):數據收到不同於數據發送槽通過尖銳的插座
客戶機代碼:
IPAddress ipAddress = new IPAddress(ip);
IPEndPoint ipEnd = new IPEndPoint(ipAddress, 5656);
Socket clientSock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
FileStream fl = File.Open("pos.xls",FileMode.Open);
byte[] fileData = ReadFully(fl);
fl.Close();
byte[] clientData = new byte[ fileData.Length];
fileData.CopyTo(clientData,0);
curMsg = "Connection to server ...";
clientSock.Connect(ipEnd);
curMsg = "File sending...";
clientSock.Send(clientData);
curMsg = "Disconnecting...";
clientSock.Close();
curMsg = "File transferred.";
服務器代碼:
curMsg = "Starting...";
sock.Listen(100);
curMsg = "Running and waiting to receive file.";
byte[] clientData = new byte[1024 * 5000];
while (true)
{
Socket clientSock = sock.Accept();
clientData = new byte[1024 * 5000];
int receivedBytesLen = clientSock.Receive(clientData);
curMsg = "Receiving data...";
FileStream fz = writeFully(clientData);
fz.Close();
curMsg = "Saving file...";
感謝你的幫助
您能否顯示發送和接收到的不同數據 – skyfoot
您是否嘗試發送一小塊已知字節(例如,新字節[] {1,2,3,4,5,6}或其他),然後進行比較另一端是什麼?它可能會使你指向正確的方向;例如收到的尺寸是否更大?如果是這樣,它與大文件一樣大嗎?你發送的模式是否出現在輸出數據的某處?等 – shelleybutterfly
我想發送一個Excel文件(1.65 MB),我收到一個5.12 MB的文件,我敢肯定,當我發送槽網絡時發生字節數組的問題,因爲我檢查發送之前的字節數組的大小和它是好的,並且在發送到服務器之後,它也改變了 –