c # исправлен порт локальной конечной точки клиента tcp, вызывающий исключение SocketException - PullRequest
0 голосов
/ 30 мая 2018

Могу ли я отсоединить сокет от локальной конечной точки?В целях безопасности мне нужно исправить исходный порт для связи TCP.В этом коде клиента я устанавливаю исходный порт на 42448:

Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, 
ProtocolType.Tcp);
IPEndPoint localEP = new IPEndPoint(IPAddress.Parse("192.168.1.123"), 42448);
s.Bind(localEP);
s.Connect(remoteEP);
s.Send(new byte[] { 0x01, 0x02, 0x03 });
s.Close();

. Он работает только один раз.Во второй раз он выдает SocketException (этот адрес уже используется) в строке s.Connect, как я вижу в netstat, есть одно соединение с этим исходным портом 42448 в состоянии TIME_WAIT, даже если я закрываюприложение.Примерно через 1 минуту это TIME_WAIT соединение исчезает, и я могу запустить свой код, но снова только один раз.Как я могу правильно отсоединить этот сокет, чтобы я мог запускать код много раз?

Обновление 1 это не сокет сервера, поэтому здесь нет прослушивания.LingerOption также не работает:

LingerOption lo = new LingerOption(false, 0);
s.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.Linger, lo);
...