У меня есть следующий код, который я хочу реализовать в качестве моего сервера.Как я понимаю, это асинхронно.и должен разрешать подключения от нескольких клиентов ...
public void Start()
{
TcpListener listener = new TcpListener(IPAddress.Any, 10250);
listener.Start();
Console.WriteLine("Listening...");
while (true)
{
IAsyncResult res = listener.BeginAcceptTcpClient(HandleAsyncConnection, listener);
connectionWaitHandle.WaitOne();
}
}
private void HandleAsyncConnection(IAsyncResult res)
{
TcpListener listener = (TcpListener)res.AsyncState;
TcpClient client = listener.EndAcceptTcpClient(res);
connectionWaitHandle.Set();
StringBuilder sb = new StringBuilder();
var data = new byte[client.ReceiveBufferSize];
using (NetworkStream ns = client.GetStream())
{
// Test reply
Byte[] replyData = System.Text.Encoding.ASCII.GetBytes(DateTime.Now.ToString());
ns.Write(replyData, 0, replyData.Length);
ns.Flush();
ns.Close();
}
client.Close();
}
У меня есть тестовое приложение, которое просто запускает запросы на мой сервер.Как вы можете видеть в коде, сервер просто отвечает своей датой / временем.Тестовое приложение отправляет, скажем, 20 запросов, которые являются просто тестовыми строками.Для каждого из этих запросов он открывает сокет, отправляет данные на мой сервер, а затем снова закрывает сокет.
Это прекрасно работает с одним запущенным тестовым приложением.Однако, если я открою два тестовых приложения, второе не сможет подключиться к серверу.Я думал, потому что я обрабатываю запрос асинхронно.и поскольку мое тестовое приложение открывается, то закрывает сокет перед каждым вызовом, чтобы я мог обрабатывать запросы от нескольких клиентов?