Итак, я настроил очень простой сервер и клиент, используя класс Socket в C #.Я сделал один ранее, где он не был асинхронным, поэтому я решил попробовать.
Проблема, с которой я столкнулся, заключается в том, что я продолжаю отправлять данные с сервера на клиент, но клиент получает только первый, а затемэто как будто перестает слушать.Какие есть способы, чтобы продолжать проверять, есть ли входящие данные, а затем, если есть, просто захватить их?
Клиент
private static Socket _clientSocket;
private static byte[] buffer = new byte[2048];
static void Main(string[] args)
{
Connect();
Console.ReadLine();
}
private static void Connect()
{
try
{
_clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
_clientSocket.BeginConnect(new IPEndPoint(IPAddress.Loopback, 1234), new AsyncCallback(ConnectCallback), null);
}
catch (Exception e)
{
Console.WriteLine(e);
throw;
}
}
private static void ConnectCallback(IAsyncResult AR)
{
try
{
_clientSocket.EndConnect(AR);
Console.WriteLine("Connected to the server");
_clientSocket.BeginReceive(buffer, 0, buffer.Length, SocketFlags.None,
new AsyncCallback(ReceiveCallback), _clientSocket);
}
catch (Exception e)
{
Console.WriteLine(e);
throw;
}
}
private static void ReceiveCallback(IAsyncResult AR)
{
Socket clientSocket = AR.AsyncState as Socket;
var length = clientSocket.EndReceive(AR);
byte[] packet = new byte[length];
Array.Copy(buffer, packet, packet.Length);
var data = Encoding.ASCII.GetString(packet);
Console.WriteLine("Received " + data);
}
И сервер
private static Socket _clientSocket;
private static byte[] buffer = new byte[2048];
static void Main(string[] args)
{
Connect();
Console.ReadLine();
}
private static void Connect()
{
try
{
_clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
_clientSocket.BeginConnect(new IPEndPoint(IPAddress.Loopback, 1234), new AsyncCallback(ConnectCallback), null);
}
catch (Exception e)
{
Console.WriteLine(e);
throw;
}
}
private static void ConnectCallback(IAsyncResult AR)
{
try
{
_clientSocket.EndConnect(AR);
Console.WriteLine("Connected to the server");
_clientSocket.BeginReceive(buffer, 0, buffer.Length, SocketFlags.None,
new AsyncCallback(ReceiveCallback), _clientSocket);
}
catch (Exception e)
{
Console.WriteLine(e);
throw;
}
}
private static void ReceiveCallback(IAsyncResult AR)
{
Socket clientSocket = AR.AsyncState as Socket;
var length = clientSocket.EndReceive(AR);
byte[] packet = new byte[length];
Array.Copy(buffer, packet, packet.Length);
var data = Encoding.ASCII.GetString(packet);
Console.WriteLine("Received " + data);
}