наконец-то нашел решение:
1-й определил класс упаковки
private class Packet
{
public Socket CurrentSocket;
//public byte[] DataBuffer = new byte[4096];
public byte[] DataBuffer = new byte[1024];
/// <summary>
/// Construct a Packet Object
/// </summary>
/// <param name="sock">The socket this Packet is being used on.</param>
/// <param name="client">The client number that this packet is from.</param>
public Packet(Socket sock)
{
CurrentSocket = sock;
}
}
, затем дождался Syn c Data
/// <summary>
/// Start an asynchronous wait for data from the server. When data is recieved, a callback will be triggered.
/// </summary>
private void WaitForData()
{
try
{
Packet pack = new Packet(_clientSocket);
_clientSocket.BeginReceive(pack.DataBuffer, 0, pack.DataBuffer.Length, SocketFlags.None, new AsyncCallback(OnDataReceived), pack);
}
catch (SocketException se)
{
System.Console.WriteLine("Client EXCEPTION in WaitForData: " + se.Message);
ToFile(se.Message);
}
}
, затем получил и преобразовал данные
/// <summary>
/// A callback triggered by receiving data from the server.
/// </summary>
/// <param name="asyn">The packet object received from the server containing the received message.</param>
private void OnDataReceived(IAsyncResult asyn)
{
try
{
Packet socketData = (Packet)asyn.AsyncState;
int dataSize = socketData.CurrentSocket.EndReceive(asyn);
if (_receive != null)
{
byte[] bData = new byte[1024];
bData = socketData.DataBuffer;
_lastreceivedata = Encoding.ASCII.GetString(bData, 0, dataSize);
_receive(socketData.DataBuffer, dataSize);
}
WaitForData();
}
catch (ObjectDisposedException)
{
System.Console.WriteLine("Client EXCEPTION in OnDataReceived: Socket has been closed");
}
catch (SocketException se)
{
System.Console.WriteLine("Client EXCEPTION in OnDataReceived: " + se.Message);
if (OnDisconnected != null)
OnDisconnected();
ToFile(se.Message);
}
}