嗯,我正在嘗試編寫一個C#服務器應用程序,它將接收來自用C++編寫的幾個客戶端的文件,主要問題是我對C#.Net很新。C#異步套接字文件傳輸
設法爲同步套接字C#服務器編寫一個代碼,但無法弄清楚如何爲異步套接字字節明智地接收數據並將它們寫入OnDataReceive回調中的單個文件。
public void OnDataReceived(IAsyncResult asyn)
{
try
{
SocketPacket socketData = (SocketPacket)asyn.AsyncState;
////Original code inside this function
//int iRx = socketData.m_currentSocket.EndReceive(asyn);
//char[] chars = new char[iRx + 1];
//System.Text.Decoder d = System.Text.Encoding.UTF8.GetDecoder();
//int charLen = d.GetChars(socketData.dataBuffer, 0, iRx, chars, 0);
//System.String szData = new System.String(chars);
//richTextBoxReceivedMsg.AppendText(szData);
////My old code from Sync socket file transfer
//Receive data from client socket till it continues
byte[] bufferData = new byte[1024];
int recvBytesLen = 0;
BinaryWriter bWrite = new BinaryWriter(File.Open(m_strCurrFolder + "File", FileMode.Append));
do
{
recvBytesLen = clientSock.Receive(bufferData, bufferData.Length, 0);
bWrite.Write(bufferData, 0, recvBytesLen);
} while (recvBytesLen > 0);
//Closing file and socket once done
bWrite.Close();
// Continue the waiting for data on the Socket
WaitForData(socketData.m_currentSocket);
}
catch (ObjectDisposedException)
{
System.Diagnostics.Debugger.Log(0, "1", "\nOnDataReceived: Socket has been closed\n");
}
catch (SocketException se)
{
MessageBox.Show(se.Message);
}
}
這是什麼問題? – Claies 2015-03-13 13:05:35
您已經在使用'recvBytesLen = clientSock.Receive(bufferData,bufferData.Length,0);'[Socket.Receive](https://msdn.microsoft.com/en-us/library/ 8s4y8aff%28v = vs.110%29.aspx) – 2015-03-13 13:10:08
這是一個正確的方式來循環異步套接字服務器內的數據? – hypheni 2015-03-13 13:47:31