Модераторы: Aliance, skyboy, MoLeX, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Глобальные переменные и сокеты 
V
    Опции темы
VKlim
Дата 1.2.2007, 18:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



У меня непонятные вещи какие-то творятся. Объявляю глобальные переменные, но их никто не видит. Объявляю через global $... но функции их не видят. Что делать? 
И еще такой вопрос. Видимо именно из-за этих глобалов сокеты, создаваемые в функции, при выходе из нее пропадают, разрывается соединение с серваком. ПОчему это может быть и как от этого избавиться?
PM MAIL   Вверх
mishaSL
Дата 1.2.2007, 18:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1046
Регистрация: 10.1.2007
Где: Санкт-Петербург

Репутация: 2
Всего: 54



Код в студию.


--------------------
Лучший способ научиться программированию - это посмотреть как это делают другие...
PM MAIL   Вверх
VKlim
Дата 2.2.2007, 10:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Код

$adress = '192.168.1.40'; // адрес сервера
$service_port = '17601'; // порт сервера
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);

function Connecting() // создать сокет 
   {
    global $adress, $socket, $service_port; 
    if ($GLOBALS["adress"] == NULL) echo "Adress empty\n";
    if ($GLOBALS["service_port"] == NULL) echo "Port empty\n";
    if ($GLOBALS["socket"] == NULL) 
        {
            echo "Сокет не создан.";
            echo"<br>";
        } 
    else 
        {
            echo "Сокет успешно создан.";
            echo"<br>";
        }
    $result = socket_connect($socket, $adress, $service_port);
    if ($result < 0) 
        {
             echo "Не подключились. ";
            echo"<br>";
        } 
    else 
        {
            echo "Успешно подключились.";
            echo"<br>";
        }
   }

ВОт код куска проги. Глобольные переменные видеться никак не хотят. Пробовал и без массива $GLOBALS, эффект один и тот же. Адрес пуст, порт пуст. МОжно переписать адрес и порт вречную, тогда секот создастся, сконнектится с серваком, но тут же связь обрывается

Это сообщение отредактировал(а) VKlim - 2.2.2007, 10:38
PM MAIL   Вверх
mishaSL
Дата 2.2.2007, 12:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1046
Регистрация: 10.1.2007
Где: Санкт-Петербург

Репутация: 2
Всего: 54



У меня эти переменные видны.
Но так лучше не делать попробуй так:
Код

<?php

$adress = '192.168.1.40'; // адрес сервера
$service_port = '17601'; // порт сервера
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);

function Connecting($adress, & $socket, $service_port) // создать сокет 
   {
    var_dump($adress, $socket, $service_port); //для проверки смотрим что в переменных
    if ($adress == NULL) echo "Adress empty\n";
    if ($service_port == NULL) echo "Port empty\n";
    if ($socket == NULL) 
        {
            echo "Сокет не создан.";
            echo"<br>";
        } 
    else 
        {
            echo "Сокет успешно создан.";
            echo"<br>";
        }
    $result = socket_connect($socket, $adress, $service_port);
    if ($result < 0) 
        {
             echo "Не подключились. ";
            echo"<br>";
        } 
    else 
        {
            echo "Успешно подключились.";
            echo"<br>";
        }
   }
Connecting($adress, $socket, $service_port);

?>



--------------------
Лучший способ научиться программированию - это посмотреть как это делают другие...
PM MAIL   Вверх
VKlim
Дата 2.2.2007, 16:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Спаисбо, с глобальными разобрался! Но все равно с сокетом проблемы. Он объявляется нормально, функции его видят. Я в нек. функции передаю через сокет какую-то информацию. При выходе из функции сокет закрывается (сервак пишет, что клиент отсоединился). В чем проблема? Как ее решить?
Код

$adress = '192.168.1.40'; // адрес сервера
$service_port = '17601'; // порт сервера
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
$result = socket_connect($socket, $adress, $service_port);

switch ($function) 
 { 
     case 'Connecting': 
        Connecting();
        break;   
     ...................
     default ;
 } 

function Connecting() // создать сокет и подключиться к mini*
   {
    global $socket, $adress, $service_port, $result;
    if ($GLOBALS["adress"] == NULL) echo "Adress empty\n";
    if ($GLOBALS["service_port"] == NULL) echo "Port empty\n";
    if ($GLOBALS["socket"] == NULL) 
        {
            echo "Сокет не создан.";
            echo"<br>";
        } 
    else 
        {
            echo "Сокет успешно создан.";
            echo"<br>";
        }
    socket_write($socket, "5", strlen("5"));
   }


PM MAIL   Вверх
mishaSL
Дата 2.2.2007, 17:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1046
Регистрация: 10.1.2007
Где: Санкт-Петербург

Репутация: 2
Всего: 54



Да не делай ты лишних глобальных переменных в функциях, потом только больше запутаешься, передавай лучше что нужно как аргументы в функцию.

Код

socket_write($socket, "5", strlen("5"));

А этим что ты хочешь сделать? выведи результат скажем:
Код

var_dump(socket_write($socket, "5", strlen("5")));


Там будет false скорее всего. Так не делается. Вторым параметром передаются заголовки.



--------------------
Лучший способ научиться программированию - это посмотреть как это делают другие...
PM MAIL   Вверх
VKlim
Дата 2.2.2007, 17:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата

А этим что ты хочешь сделать? выведи результат скажем:
Код

socket_write($socket, "5", strlen("5"));


 Да это все нормально, работает. Серваку через сокет передается 5. Но вот он передает и отконнективается
PM MAIL   Вверх
mishaSL
Дата 2.2.2007, 17:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1046
Регистрация: 10.1.2007
Где: Санкт-Петербург

Репутация: 2
Всего: 54



Что у тебя выводит эта строка:
Код

var_dump(socket_write($socket, "5", strlen("5")));



--------------------
Лучший способ научиться программированию - это посмотреть как это делают другие...
PM MAIL   Вверх
VKlim
Дата 2.2.2007, 19:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата

Что у тебя выводит эта строка:
Код

Выделить всёкод PHP
var_dump(socket_write($socket, "5", strlen("5")));


 Выводит int(1) 

Еще. Подскажите, что такое. Пишу 
Код

$adress = '192.168.1.40'; // адрес сервера
$service_port = '17601'; // порт сервера
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_bind($socket, $adress, $service_port);


Мне выводится:
Цитата

Warning: socket_bind() [function.socket-bind]: unable to bind address [0]: Требуемый адрес для своего контекста неверен. in T:\home\localhost\test\base.php on line 43

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


 




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


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

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