Его можно использовать для изменения последовательности навигации по фокусу элемента формы по умолчанию.
Итак, если у вас есть:
text input A
text input B
submit button C
с помощью клавиши табуляции, вы перемещаетесь по A -> В-> С. Tabindex позволяет вам изменять этот поток.
Так как Вы используете TcpClient
, который означает, что Вы проверяете открытые порты TCP. Существует много хороших объектов, доступных в Система. Сеть. Пространство имен NetworkInformation .
Использование эти IPGlobalProperties
объект добраться до массива TcpConnectionInformation
объекты, которые можно затем опросить о IP конечной точки и порте.
int port = 456; //<--- This is your value
bool isAvailable = true;
// Evaluate current system tcp connections. This is the same information provided
// by the netstat command line application, just in .Net strongly-typed object
// form. We will look through the list, and if our port we would like to use
// in our TcpClient is occupied, we will set isAvailable to false.
IPGlobalProperties ipGlobalProperties = IPGlobalProperties.GetIPGlobalProperties();
TcpConnectionInformation[] tcpConnInfoArray = ipGlobalProperties.GetActiveTcpConnections();
foreach (TcpConnectionInformation tcpi in tcpConnInfoArray)
{
if (tcpi.LocalEndPoint.Port==port)
{
isAvailable = false;
break;
}
}
// At this point, if isAvailable is true, we can proceed accordingly.
ipGlobalProperties.GetActiveTcpConnections()
не возвращается, соединения в Слушают состояние.
Порт может использоваться для слушания, но без одного связанного с ним выше не будет работать метод, описанный.
netstat! Это - сетевая утилита командной строки, которая поставлется с окнами. Это, в настоящее время показывает все текущие установленные соединения и все порты слушаясь. Можно использовать эту программу для проверки, но если Вы хотите сделать, это из кода изучает Систему. Сеть. Пространство имен NetworkInformation? Это - новое пространство имен с 2,0. Там существуют некоторые положительные герои. Но в конечном счете если Вы хотите получить тот же вид информации, это доступно посредством команды netstat, необходимо будет закончиться к P/Invoke...
, Что пространство имен содержит набор классов, которые можно использовать для выяснения вещей о сети.
я не смог найти, что старая пайса кода, но я думаю, что можно записать что-то подобное сами. Хорошее начало должно проверить помощник API IP. MSDN Google для функция GetTcpTable WINAPI и использование P/Invoke для перечисления, пока у Вас нет информации, в которой Вы нуждаетесь.
Вы находитесь на неправильном конце Межтрубы. Это - сервер, который может иметь только один конкретный открытый порт. Некоторый код:
IPAddress ipAddress = Dns.GetHostEntry("localhost").AddressList[0];
try {
TcpListener tcpListener = new TcpListener(ipAddress, 666);
tcpListener.Start();
}
catch (SocketException ex) {
MessageBox.Show(ex.Message, "kaboom");
}
Сбои с:
Только одно использование каждого адреса сокета (адрес/порт протокола/сети) обычно разрешается.
string hostname = "localhost";
int portno = 9081;
IPAddress ipa = (IPAddress) Dns.GetHostAddresses(hostname)[0];
try
{
System.Net.Sockets.Socket sock = new System.Net.Sockets.Socket(System.Net.Sockets.AddressFamily.InterNetwork, System.Net.Sockets.SocketType.Stream, System.Net.Sockets.ProtocolType.Tcp);
sock.Connect(ipa, portno);
if (sock.Connected == true) // Port is in use and connection is successful
MessageBox.Show("Port is Closed");
sock.Close();
}
catch (System.Net.Sockets.SocketException ex)
{
if (ex.ErrorCode == 10061) // Port is unused and could not establish connection
MessageBox.Show("Port is Open!");
else
MessageBox.Show(ex.Message);
}
Вы говорите
, я подразумеваю, что это не используется никаким другим приложением. Если приложение использует порт другие, не может использовать его, пока это не становится свободным.
, Но можно всегда соединяться с портом, в то время как другие используют его, если что-то слушает там. Иначе, http порт 80 была бы путаница.
, Если Ваш
c = new TcpClient(ip, port);
сбои, то ничто не слушает там. Иначе это соединится, даже если некоторая другая машина/приложение будет иметь сокет, открытый для того IP и порта.
TcpClient c;
//I want to check here if port is free.
c = new TcpClient(ip, port);
... как я могу сначала проверить, свободен ли определенный порт на моей машине?
Я подразумеваю, что это не используется никаким другим приложением. Если приложение использует порт другие, не может использовать его, пока это не становится свободным. – Ali
Вы неправильно поняли то, что происходит здесь.
TcpClient (...) параметры имеют IP сервера и порт сервера, с которым Вы хотите соединиться.
TcpClient выбирает переходный локальный порт из доступного пула для передачи с сервером. Нет никакой потребности проверить на доступность локального порта, поскольку это автоматически обрабатывается winsock слоем.
В случае, если Вы не можете соединиться с сервером с помощью вышеупомянутого фрагмента кода, проблемой мог быть один или несколько из нескольких. (т.е. IP сервера и/или порт являются неправильным, удаленным сервером, не доступным и т.д.)
При установке соединения TCP с 4 кортежами (исходный IP, исходный порт, dest-ip, dest-порт) должен быть уникальным - это должно гарантировать, что пакеты поставляются правильному месту.
Существует дальнейшее ограничение на сторону сервера, которую только одна программа сервера может связать с числом входящего порта (принимающий один IP-адрес; серверы мульти-NIC имеют другие полномочия, но мы не должны обсуждать их здесь).
Так, в конце сервера, Вас:
На клиентском конце это обычно немного более просто:
Нет никакого требования, что целевой IP/порт быть уникальным, так как это привело бы только к одному человеку в способности времени использовать Google, и это вполне прилично уничтожит их бизнес-модель.
Это означает, что можно даже сделать такие поразительные вещи как многосеансный FTP, так как Вы настраиваете несколько сессий, где единственной разницей является Ваш исходный порт, позволяя Вам загрузить блоки параллельно. Потоки немного отличаются в этом, место назначения каждой сессии обычно отличается.
И, после весь этот (жаль) колеблющийся, ответ на Ваш конкретный вопрос - то, что Вы не должны указывать франко-порт. Если Вы соединитесь с сервером с вызовом, который не указывает Ваш исходный порт, то он будет почти наверняка использовать нуль под покрытиями, и система даст Вам неиспользованный.
Имейте в виду, что временной интервал между проверкой и моментом установления соединения каким-либо процессом может занять порт - классический TOCTOU . Почему бы вам просто не попробовать подключиться? Если произойдет сбой, вы знаете, что порт недоступен.
Если я не сильно ошибаюсь, вы можете использовать System.Network.whither для проверки.
Однако Это всегда приводит к состоянию гонки.
Канонический способ проверки - попытаться прослушать этот порт. Если вы получаете сообщение об ошибке, что порт не был открыт.
Я думаю , это является частью того, почему bind () и listen () являются двумя отдельными системными вызовами.
Using jQuery 1.3.2 the following worked for me:
$('iframe').ready(function() {
$('body', $('iframe').contents()).html('Hello World!');
});
REVISION:! Actually the above code sometimes looks like it works in Firefox, never looks like it works in Opera.
Instead I implemented a polling solution for my purposes. Simplified down it looks like this:
$(function() {
function manipIframe() {
el = $('body', $('iframe').contents());
if (el.length != 1) {
setTimeout(manipIframe, 100);
return;
}
el.html('Hello World!');
}
manipIframe();
});
This doesn't require code in the called iframe pages. All code resides and executes from the parent frame/window.
--121 --- 633578--Вам не нужно знать, какие порты открыты на вашем локальном компьютере для подключения к какой-либо удаленной службе TCP (если вы не хотите использовать определенный локальный порт, но обычно это не так. случай).
Каждое соединение TCP / IP идентифицируется 4 значениями: удаленный IP, номер удаленного порта, локальный IP, номер локального порта, но вам нужно знать только удаленный IP и номер удаленного порта, чтобы установить соединение.
Когда вы создаете tcp-соединение, используя
TcpClient c; c = new TcpClient(remote_ip, remote_port);
, ваша система автоматически назначит вашему соединению один из многих свободных номеров локальных портов. Вам не нужно ничего делать. Вы также можете проверить, открыт ли удаленный порт. но нет лучшего способа сделать это, чем просто попытаться подключиться к нему.
спасибо за ответ jro. Мне пришлось подправить его для моего использования. Мне нужно было проверить, прослушивается ли порт, но не обязательно активен. Для этого я заменил
TcpConnectionInformation[] tcpConnInfoArray = ipGlobalProperties.GetActiveTcpConnections();
на
IPEndPoint[] objEndPoints = ipGlobalProperties.GetActiveTcpListeners();.
Я итерировал массив конечных точек, проверяя, что мое значение порта не найдено.