Переместите LoopConnect();
в while
l oop, чтобы получить
...
Console.WriteLine("Enter a request: ");
string req = Console.ReadLine();
LoopConnect();
byte[] buffer = Encoding.ASCII.GetBytes(req);
_clientSocket.Send(buffer,0,buffer.Length,SocketFlags.None);
_clientSocket.ReceiveTimeout = 10000;
...
Это должно гарантировать, что вы открываете сокет всякий раз, когда хотите отправить запрос.
In Кроме того, вы можете захотеть переместить операции выключения и закрытия сокета в блок finally
в конце оставшейся попытки, используя
try
{
var receivedBuffer = new byte[2048];
int rec = _clientSocket.Receive(receivedBuffer, SocketFlags.None);
byte[] data = new byte[rec];
Array.Copy(receivedBuffer, data, rec);
string result = Encoding.ASCII.GetString(data);
Console.WriteLine("Received : " + result);
}
catch (SocketException se)
{
if (se.SocketErrorCode == SocketError.TimedOut)
{
Console.WriteLine("TIMEOUT");
}
}
finally
{
_clientSocket.Disconnect(true);
}
, поскольку finally
больше не использует Shutdown
и Close
не забудьте освободить ресурсы в конце программы с помощью
static void Main(string[] args)
{
LoopConnect();
SendLoop();
_clientSocket.Shutdown(S);
_clientSocket.Close(SocketShutdown.Both);
}