projman/hlp/ru/tcl/socket.html

138 lines
8.8 KiB
HTML
Raw Normal View History

<!DOCTYPE HTML PUBLIC -//W3C//DTD HTML 4.01 Transitional//EN>
2015-10-19 13:27:31 +03:00
<html>
<head>
<title>socket</title>
</head>
<body>
<h1>socket</h1>
<p>Команда открывает сетевое TCP-соединение.<p>
2015-10-19 13:27:31 +03:00
<h2>СИНТАКСИС</h2>
2015-10-19 13:27:31 +03:00
<pre>
<strong>socket</strong> ?<em>options</em>? <em>host</em> <em>port</em>
<strong>socket</strong> <strong>-server</strong> <em>command</em> ?<em>options</em>? <em>port</em>
</pre>
<h2><a name=ОПИСАНИЕ></a>ОПИСАНИЕ</h2>
<p>Эта команда открывает сетевое соединение и возвращает
идентификатор канала, который может использоваться в
последующих командах <strong><a href=read.html>read</a></strong>,
<a href=puts.html><strong>puts</strong></a> или
<strong><a href=flush.html>flush</a></strong>. В настоящее время
поддерживается только протокол TCP. Команда может
использоваться для открытия соединения как со стороны
сервера, так и со стороны клиента.</p>
<h3><a name=КЛИЕНТСКОЕ СОЕДИНЕНИЕ></a>КЛИЕНТСКОЕ СОЕДИНЕНИЕ</h3>
<p>Если опция <strong>-server</strong> не указана, то канал открывается со
стороны клиента, и возвращаемый идентификатор канала может быть
использован для операции чтения и записи. Аргументы <em>port</em>
и <em>host</em> задают порт для соединения. По данному порту
должен быть сервер, обслуживающий соединение. Аргумент
<em>port</em> должен быть целым числом, а <em>host</em> - адресом
машины в доменном стиле (например, <strong>www.sunlabs.com</strong>) или
числовым IP-адресом (например, <strong>127.0.0.1</strong>). Для ссылки на
локальную машину, на которой выполняется команда, можно
использовать значение <em>localhost</em>.</p>
<p>Для задания дополнительной информации о соединении можно
использовать следующие опции.</p>
2015-10-19 13:27:31 +03:00
<dl>
<dt><strong>-myaddr</strong> <em>addr</em></dt>
<dd>Аргумент <em>addr</em> задает доменный или числовой адрес
сетевого интерфейса клиентской стороны для упрощения
соединения. Эта опция может быть полезна, если на клиентской
машине есть несколько сетевых интерфейсов. Если опция не
указана, системный интерфейс будет выбран операционной
системой.</dd>
2015-10-19 13:27:31 +03:00
<dt><strong>-myport</strong> <em>port</em></dt>
<dd>Аргумент <em>port</em> задает номер порта для клиентской
стороны соединения. Если опция не указана, номер порта для
клиента будет определен операционной системой.</dd>
2015-10-19 13:27:31 +03:00
<dt><strong>-async</strong></dt>
<dd>Использование опции <strong>-async</strong> приведет к тому, что
клиент будет подсоединен в асинхронном режиме. Это значит, что
сокет будет создан немедленно, возможно, еще до установления
связи с сервером. Если канал открыт в блокирующем режиме, то
при выполнении команды <a href= gets.html><strong>gets</strong></a>
или <a href=flush.html><strong>flush</strong></a> по такому сокету,
команда завершится только после того, как процесс установления
соединения будет завершен. Если канал открыт в неблокирующем
режиме, то в этой ситуации команда завершится немедленно, а
команда <a href= fblocked.html><strong>fblocked</strong></a> для
данного канала возвратит <strong>1</strong>.</dd>
2015-10-19 13:27:31 +03:00
</dl>
<h3><a name=СЕРВЕРНОЕ СОЕДИНЕНИЕ></a>СЕРВЕРНОЕ СОЕДИНЕНИЕ</h3>
2015-10-19 13:27:31 +03:00
<p>Если в команде присутствует опция <strong>-server</strong>, то новый
сокет будет сервером для порта <em>port</em>. Tcl будет
автоматически устанавливать соединения по данному порту. Для
каждого соединения будет создаваться новый канал, который может
быть использован для связи с клиентом. При этом Tcl выполняет
команду <em>command</em> с тремя дополнительными аргументами: имя
нового канала, адрес клиентской машины в сетевой нотации и номер
порта клиента.</p>
2015-10-19 13:27:31 +03:00
<p>В команде можно использовать следующие опции:</p>
2015-10-19 13:27:31 +03:00
<dl>
<dt><strong>-myaddr</strong> <em>addr</em></dt>
<dd>Аргумент <em>addr</em> задает доменный или числовой адрес
сетевого интерфейса серверной стороны для упрощения
соединения. Эта опция может быть полезна, если на серверной
машине есть несколько сетевых интерфейсов. Если опция не
указана, сокет связывается со специальным адресом INADDR_ANY,
который позволяет принимать соединения от любого
интерфейса.</dd>
2015-10-19 13:27:31 +03:00
</dl>
<p>Канал сервера не может быть использован для приема или выдачи
данных. Его единственное назначение - принимать новые клиентские
подсоединения. Каналы, открываемые для каждого клиентского
соединения, открываются на чтение и запись. Закрытие серверного
канала вызывает отключение сервера, так что никаких новых
соединений не может быть выполнено. Однако существующие
соединения сохраняются.</p>
2015-10-19 13:27:31 +03:00
<p>Сокет сервера не может обнаружить новое соединение при
незапущенном обработчике событий. Поэтому в приложении должен
быть запущен обработчик событий, например, командой <strong><a
href=vwait.html>vwait</a></strong>.</p>
2015-10-19 13:27:31 +03:00
<h2><a name=КОНФИГУРАЦИОННЫЕ ОПЦИИ></a>КОНФИГУРАЦИОННЫЕ ОПЦИИ</h2>
2015-10-19 13:27:31 +03:00
<p>Команда <strong><a href=fconfigure.html>fconfigure</a></strong> может
получить значения нескольких неизменяемых опций для сокетов:
2015-10-19 13:27:31 +03:00
<dl>
<dt><strong>-sockname</strong></dt>
<dd>Эта опция возвращает список из трех элементов: адреса, имени
хоста и номера порта для сокета. Если имя хоста не может быть
определено, второй элемент списка совпадает с первым
адресом.</dd>
2015-10-19 13:27:31 +03:00
<dt><strong>-peername</strong></dt>
<dd>Эта опция не поддерживается для сокетов сервера. Для
сокетов клиента и установленных соединений она выдает список
из трех элементов: адреса, имени хоста и номера порта для
сокета. Если имя хоста не может быть определено, второй
элемент списка совпадает с первым - адресом.</dd>
2015-10-19 13:27:31 +03:00
</dl>
</body>
</html>