Я пишу небольшое приложение для сокетов C #. На самом деле у меня есть два, сервер и клиент.
Пользователь запускает клиент, вводит IP-адрес и порт для сервера, нажимает «подключиться», а затем, после подключения, он может ввести текст в текстовое поле и отправить его на сервер.
Сервер просто отображает «Нет соединения» или «Соединение с [ip]: [порт]», а последнее полученное сообщение внизу.
Сервер успешно принимает сообщения и даже нормально обрабатывает клиентское отключение.
Теперь я пытаюсь снова прослушать его после того, как клиент отключился, но по какой-то причине ничто из того, что я пробую, не позволит ему снова начать слушать.
Вот часть моего кода:
Socket socket;
private void listen()
{
socket = new Socket(AddressFamily.InterNetwork,
SocketType.Stream, ProtocolType.Tcp);
socket.Bind(new IPEndPoint(IPAddress.Any, 12345));
socket.Listen(10);
socket.BeginAccept(new AsyncCallback(acceptAsync), socket);
}
и
private void receiveAsync(IAsyncResult res)
{
Socket socket = (Socket)res.AsyncState;
try
{
int nBytes = socket.EndReceive(res);
if (nBytes > 0)
{
Invoke(new MethodInvoker(delegate()
{
lMessage.Text = encoder.GetString(buffer);
}));
setupReceiveAsync(socket);
}
else
{
Invoke(new MethodInvoker(delegate()
{
lConnections.Text = "No Connections.";
lMessage.Text = "No Messages.";
socket.Shutdown(SocketShutdown.Both);
socket.Close();
listen();
}));
}
}
catch { }
}
Последняя строка: listen (); это то, что выдает ошибку.
Я попытался просто вызвать socket.BeginAccept () снова, но это также вызывает исключение.
Я получаю сообщение:
Обычно разрешено только одно использование каждого адреса сокета (протокола / сетевого адреса / порта)
Если я не вызываю свою функцию listen () и вместо этого просто вызываю socket.BeginAccept (), тогда я получаю «Сначала вы должны вызвать socket.listen ()»
Если я вызываю функцию socket.listen (), она сообщает, что она уже подключена, и корзина начинает слушать.
Как только я установил асинхронное соединение и получил несколько асинхронных сообщений, как мне снова начать получать?