Я использую следующий код (построенный на основе ответов на мои предыдущие вопросы о SO):
public void Start()
{
listener = new TcpListener(IPAddress.Any, 9030);
listener.Start();
Console.WriteLine("Listening...");
StartAccept();
}
private void StartAccept()
{
listener.BeginAcceptTcpClient(HandleAsyncConnection, listener);
}
private void HandleAsyncConnection(IAsyncResult res)
{
StartAccept();
TcpClient client = listener.EndAcceptTcpClient(res);
StringBuilder sb = new StringBuilder();
var data = new byte[client.ReceiveBufferSize];
using (NetworkStream ns = client.GetStream())
{
int readCount;
while ((readCount = ns.Read(data, 0, client.ReceiveBufferSize)) != 0)
{
sb.Append(Encoding.UTF8.GetString(data, 0, readCount));
}
// Do work
// Test reply
Byte[] replyData = System.Text.Encoding.ASCII.GetBytes(DateTime.Now.ToString());
ns.Write(replyData, 0, replyData.Length);
ns.Flush();
ns.Close();
}
client.Close();
}
Строка «Выполнить работу» показывает, где я буду выполнять необходимую обработку для своего клиента.
Однако я не вижу, как использовать этот код, чтобы прочитать данные клиента и затем ответить на него.При использовании этого кода я могу прекрасно прочитать, что отправлено моим клиентом, однако, как только это происходит, клиент блокируется и в конечном итоге жалуется, что соединение было разорвано.Он не получает мой ответ.
Есть идеи, как это исправить?