Member 12659979 Ответов: 1

Запрос на подключение был сделан на уже подключенном сокете


запрос на подключение был сделан на уже подключенном сокете

что это за тип msg?

Что я уже пробовал:

Console.WriteLine("That program can transfer small file. I've test up to 850kb file");
                Socket sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.IP);
                // m_socWorker = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.IP);
                //String szIPSelected = "172.31.1.111";
                //String szPort = "80";

                String szIPSelected = "10.2.2.82";
                String szPort = "5800";
                int alPort = System.Convert.ToInt16(szPort, 10);


                System.Net.IPAddress remoteIPAddress = System.Net.IPAddress.Parse(szIPSelected);
                System.Net.IPEndPoint ipEnd = new System.Net.IPEndPoint(remoteIPAddress, alPort);
                sock.Connect(ipEnd);

Richard MacCutchan

Похоже, вы делаете соединение не один раз.

1 Ответов

Рейтинг:
2

Jochen Arndt

Вы не закрыли предыдущее соединение и не пытались повторно подключиться, не подготовившись к повторному использованию сокета.

Вы должны убедиться, что розетки изящно выключены и закрыты. Видеть Изящное выключение, варианты задержки и закрытие сокета (Windows)[^].

После закрытия вы должны позвонить в Разъем.Метод Отключения (Boolean) (System. Net. Sockets)[^] с помощью reuseSocket набор параметров. См. также пример кода по приведенной выше ссылке, который вызывает Shutdown сначала просигнализируйте другому сайту, что соединение будет закрыто.

Если вы хотите повторно использовать соединение (используя тот же IP-адрес и порт вскоре после закрытия соединения), вы должны подготовить сокет. При создании вы можете установить SocketOptionName.ReuseAddress вариант с использованием Разъем.Метод SetSocketOption (SocketOptionLevel, SocketOptionName, Object) (System. Net. Sockets)[^].

Вы также можете установить время задержки. Если этого не делать, вам придется подождать, пока розетка окончательно не закроется изнутри (обычно 4 минуты). Но вы не должны устанавливать его на очень маленькие значения, потому что это может привести к потере ожидающих данных и будет принудительным закрытием (в отличие от изящного закрытия).