Socket 데이터를 비동기적으로 수신
1645 단어 socket
#region Socket
/// <summary>
/// Socket
/// </summary>
/// <param name="socket"></param>
/// <returns></returns>
public static byte[] ReceiveData(Socket socket)
{
ReceiveObject state = new ReceiveObject() { Client = socket };
socket.BeginReceive(state.Buffer, 0, state.Buffer.Length, SocketFlags.None, new AsyncCallback(ReadCallback), state);
state.ReceiveDone.WaitOne(1000 * 10); // 10
byte[] result = state.Stream.ToArray();
return result;
}
/// <summary>
///
/// </summary>
private class ReceiveObject
{
public Socket Client;
public byte[] Buffer = new byte[4096];
public System.IO.MemoryStream Stream = new System.IO.MemoryStream();
public System.Threading.ManualResetEvent ReceiveDone = new System.Threading.ManualResetEvent(false);
}
/// <summary>
/// read
/// </summary>
/// <param name="ar"></param>
private static void ReadCallback(IAsyncResult ar)
{
ReceiveObject state = (ReceiveObject)ar.AsyncState;
int bytesRead = state.Client.EndReceive(ar);
if (bytesRead > 0)
{
try
{
state.Stream.Write(state.Buffer, 0, bytesRead);
state.Client.BeginReceive(state.Buffer, 0, state.Buffer.Length, SocketFlags.None, new AsyncCallback(ReadCallback), state);
}
catch (Exception ex)
{
Log.Error(ex.Message);
state.ReceiveDone.Set();
}
}
else
{
state.ReceiveDone.Set();
}
}
#endregion
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
React 구성 요소에서 소켓 이벤트 리스너가 여러 번 실행됩니다.기본적이지만 종종 간과되는 사이드 프로젝트를 하면서 배운 것이 있습니다. 이 프로젝트에는 단순히 두 가지 주요 부분이 포함되어 있습니다. 프런트 엔드: 반응 및 재료 UI 백엔드: Express, Typescript...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.