嗯,我正在尝试编写一个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