Модераторы: gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Socket.Connect, Socket.Connect  
:(
    Опции темы
DEADLY
Дата 2.4.2010, 07:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 62
Регистрация: 23.8.2007

Репутация: нет
Всего: 1



как уменьшить время на попытку подключения в Socket.Connect 
т.е. при подключении к адресу он ожидает около 10 сек и больше ,если не может приконектится,как уменьшить этот интервал ???
Код

public static String StartClient(IPAddress cIP, int port, String input)
        {
            try
            {
                int bytesRead;
                byte[] inbuf = Encoding.ASCII.GetBytes(input);
                Socket client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                String response = String.Empty;
                StateObject state = new StateObject();

                state.workSocket = client;
                client.Connect(cIP, port);
                if (!client.Connected)
                    return "no response";
                client.Send(inbuf);
                if (!client.Poll(3000, SelectMode.SelectRead))
                {
                    return "ERROR";
                }
                bytesRead = client.Receive(state.buffer);
                response = Encoding.ASCII.GetString(state.buffer, 0, bytesRead);
                //Console.WriteLine("Answer from {0}: {1}", cIP.ToString(), response);
                client.Shutdown(SocketShutdown.Both);
                client.Close();
                return response;
            }
            catch
            {
                //if (e == System.Net.Sockets.SocketException)
                //Console.WriteLine(e.ToString());
                //Console.WriteLine("*НЕТ СВЯЗИ С КОНТРОЛЛЕРОМ {0}*", cIP.ToString());
                return "no response";
            }
        }



Это сообщение отредактировал(а) DEADLY - 2.4.2010, 07:23
PM MAIL   Вверх
jonie
Дата 4.4.2010, 16:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 8
Всего: 118



во-первых можно крутануть реестр: http://support.microsoft.com/default.aspx?...kb;en-us;120642
во-вторых в C# можно применить такой хак:
Код

public static Socket ConnectToserver(IPEndPoint endPoint, int port, int timeoutMs)
        {
            Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

            try
            {
                // do not block - do not want to be forced to wait on (too- long) timeout
                socket.Blocking = false;

                // initiate connection - will cause exception because we're not  blocking
                socket.Connect(endPoint);
                return socket;
            }
            catch (SocketException socketException)
            {
                // check if this exception is for the expected 'Would Block' error
                if (socketException.ErrorCode != 10035)
                {
                    socket.Close();
                    // the error is not 'Would Block', so propogate the exception
                    throw;
                }
                // if we get here, the error is 'Would Block' so just continue  execution   }
                // wait until connected or we timeout
                int timeoutMicroseconds = timeoutMs * 1000;
                if (socket.Poll(timeoutMicroseconds, SelectMode.SelectWrite) == false)
                {
                    // timed out
                    socket.Close();
                    throw new Exception("The host failed to connect");
                }

                // *** AT THIS POINT socket.Connected SHOULD EQUAL TRUE BUT  IS FALSE!  ARGH!
                // set socket back to blocking
                socket.Blocking = true;
                return socket;
            }

        }


а вот в C++ начиная с WinXP есть ConnectEx вроде бы... кроме того можно использовать Overlapped IO .....


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
stab
mr.DUDA
Exception

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, stab, mr.DUDA, Exception.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Базы данных под .NET | Следующая тема »


 




[ Время генерации скрипта: 0.0622 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.