Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: c++ и php

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
Agassi
Отправлено: 26 Февраля, 2009 - 20:18:19
Post Id



Частый гость


Покинул форум
Сообщений всего: 158
Дата рег-ции: Окт. 2008  


Помог: 0 раз(а)




Нужно соединить пхп и с++ через сокеты.

PHP:
скопировать код в буфер обмена
  1.  
  2. if(($socket=socket_create(AF_INET,SOCK_DGRAM,SOL_UDP))<0)
  3. {
  4.         echo "Незя создать сокет";
  5. }
  6.  if(!socket_connect($socket,'127.0.0.1',3000))
  7.  {
  8.  echo "невозможно подключится";
  9.  }
  10.  
  11.  
  12.         if (false === ($buf = socket_read($socket, 2048, PHP_NORMAL_READ))) {
  13.             echo "socket_read() failed: reason: " . socket_strerror($ret) . "\n";
  14.  



PHP:
скопировать код в буфер обмена
  1.  
  2.         try
  3.         {
  4.  
  5.                 /*
  6.                 инициализация библиотеки
  7.                 */
  8.                 WSADATA wsadt;
  9.  
  10.                 int res = WSAStartup( MAKEWORD(2,2), &wsadt );
  11.                 if( res != 0 ) throw "Socket initializatoin failed";
  12.  
  13.                 /*
  14.                 создание сокета
  15.                 */
  16.                 SOCKET sckt;
  17.                 sckt = socket( AF_INET, SOCK_DGRAM, IPPROTO_UDP );
  18.  
  19.                 if ( sckt == INVALID_SOCKET ) throw "Socket creation failed";
  20.  
  21.  
  22.                 /*
  23.                 установить на сокете broadcast-flag
  24.                 */
  25.                 BOOL flag = true;
  26.                 res = setsockopt(sckt, SOL_SOCKET, SO_BROADCAST, (char *)&flag, sizeof(BOOL));
  27.                 if( res != 0 ) throw "Set option error";
  28.  
  29.  
  30.                 /*
  31.                 привязка соката к адресу и порту
  32.                 */
  33.                 sockaddr_in addrInfo;
  34.  
  35.                 addrInfo.sin_family = AF_INET;
  36.                 addrInfo.sin_addr.s_addr = inet_addr( "127.0.0.1" );//INADDR_BROADCAST;//inet_addr( "255.255.255.255" );
  37.                 addrInfo.sin_port = htons( 3000 );
  38.  
  39.  
  40.                 /*
  41.                 широковещательная передача данных
  42.                 */
  43.                 char sendBuf[] = "LOL?";
  44.                 while(true)
  45.                 {
  46.                         int snd = sendto( sckt, sendBuf, sizeof(sendBuf), 0, (sockaddr *)&addrInfo, sizeof(sockaddr_in) );
  47.                         ::Sleep(1000);
  48.                         snd = 0;
  49.                 }
  50.  
  51.  
  52.                 WSACleanup();
  53.         }
  54.         catch(char *err)
  55.         {
  56.                 cout << err << endl;
  57.                 WSACleanup();
  58.         }
  59.  
  60.         return 0;
  61.  


Не могу понять де имено ошибка??И ваше сокеты могут соединится между собойй??
 
 Top
valenok Модератор
Отправлено: 26 Февраля, 2009 - 20:27:28
Post Id



Здесь могла бы быть ваша реклама


Покинул форум
Сообщений всего: 4574
Дата рег-ции: Июль 2006  
Откуда: Israel


Помог: 3 раз(а)




А не проще просто запускать процесс или в запущенный процесс передавать stdin ?
Сокеты как сокеты. А отличная статья http://phpfaq[dot]ru/debug должна навести вас на мысль
что нужно сначала убедится что обе части работают по отдельности, потом проверить что данные доходят, а потом уже работать дальше, исправляя то, что не работает.


-----
Truly yours, Sasha.
 
My status
 Top
Agassi
Отправлено: 26 Февраля, 2009 - 23:34:07
Post Id



Частый гость


Покинул форум
Сообщений всего: 158
Дата рег-ции: Окт. 2008  


Помог: 0 раз(а)




valenok пишет:
ужно сначала убедится что обе части работают


Проверял уже,работают.С++ код работает с своим клиентом и пхп тоже работает с своим сервером,ваше я код взял из книжки и тот и тот.Просто пхп чуток урезал и всё
 
 Top
valenok Модератор
Отправлено: 27 Февраля, 2009 - 12:44:53
Post Id



Здесь могла бы быть ваша реклама


Покинул форум
Сообщений всего: 4574
Дата рег-ции: Июль 2006  
Откуда: Israel


Помог: 3 раз(а)




Тогда дальше проверять всё что можно. http://phpfaq[dot]ru/debug
Угадать в чём дело я не могу, проверять за тебя не собираюсь.


-----
Truly yours, Sasha.
 
My status
 Top
Гость
Отправлено: 27 Февраля, 2009 - 15:00:21
Post Id


УДАЛЁН










Цитата:
Проверял уже,работают
Telnetом коннектились к запущенным сокетам? И наоборт пробовали подлкючаться к 100% рабочему порту (Например к какомунибудь HTTP-серверу)
И файервол точно никого не блокирует?
 
 Top
Agassi
Отправлено: 27 Февраля, 2009 - 19:52:57
Post Id



Частый гость


Покинул форум
Сообщений всего: 158
Дата рег-ции: Окт. 2008  


Помог: 0 раз(а)




valenok пишет:
Угадать в чём дело я не могу, проверять за тебя не собираюсь.
Yt Не надо гадать и не надо проверять,если дело имел с сокетами то сразу видна ошибка.
JustUserR пишет:
Telnetом коннектились

ОНа сбой дает
JustUserR пишет:
И файервол точно никого не блокирует?

Нет фаервола
(Добавление)
с++(сервер)

PHP:
скопировать код в буфер обмена
  1.  
  2. // sockets.cpp : Defines the entry point for the console application.
  3. //
  4.  
  5. #include "stdafx.h"
  6.  
  7. #pragma comment(lib, "ws2_32.lib")
  8.  
  9.  
  10. int _tmain(int argc, _TCHAR* argv[])
  11. {
  12.  
  13.         try
  14.         {
  15.  
  16.                 /*
  17.                 инициализация библиотеки
  18.                 */
  19.                 WSADATA wsadt;
  20.  
  21.                 int res = WSAStartup( MAKEWORD(2,2), &wsadt );
  22.                 if( res != 0 ) throw "Socket initializatoin failed";
  23.  
  24.                 /*
  25.                 создание сокета
  26.                 */
  27.                 SOCKET sckt;
  28.                 sckt = socket( AF_INET, SOCK_DGRAM, IPPROTO_UDP );
  29.  
  30.                 if ( sckt == INVALID_SOCKET ) throw "Socket creation failed";
  31.  
  32.  
  33.                 /*
  34.                 установить на сокете broadcast-flag
  35.                 */
  36.                 BOOL flag = true;
  37.                 res = setsockopt(sckt, SOL_SOCKET, SO_BROADCAST, (char *)&flag, sizeof(BOOL));
  38.                 if( res != 0 ) throw "Set option error";
  39.  
  40.  
  41.                 /*
  42.                 привязка соката к адресу и порту
  43.                 */
  44.                 sockaddr_in addrInfo;
  45.  
  46.                 addrInfo.sin_family = AF_INET;
  47.                 addrInfo.sin_addr.s_addr = inet_addr( "127.0.0.1" );//INADDR_BROADCAST;//inet_addr( "255.255.255.255" );
  48.                 addrInfo.sin_port = htons( 3000 );
  49.  
  50.  
  51.                 /*
  52.                 широковещательная передача данных
  53.                 */
  54.                 char sendBuf[] = "LOL?";
  55.                 while(true)
  56.                 {
  57.                         int snd = sendto( sckt, sendBuf, sizeof(sendBuf), 0, (sockaddr *)&addrInfo, sizeof(sockaddr_in) );
  58.                         ::Sleep(1000);
  59.                         snd = 0;
  60.                 }
  61.  
  62.  
  63.                 WSACleanup();
  64.         }
  65.         catch(char *err)
  66.         {
  67.                 cout << err << endl;
  68.                 WSACleanup();
  69.         }
  70.  
  71.         return 0;
  72. }
  73.  
  74.  

ПХп (клиент)
PHP:
скопировать код в буфер обмена
  1.  
  2. <?
  3.  
  4.  
  5. /* Allow the script to hang around waiting for connections. */
  6.  
  7. /* Turn on implicit output flushing so we see what we're getting
  8.  * as it comes in. */
  9.  
  10.  
  11.  
  12.  
  13. if (($sock = socket_create(AF_INET,SOCK_DGRAM,SOL_UDP)) === false) {
  14.     echo "socket_create() failed: reason: " . socket_strerror(socket_last_error()) . "\n";
  15. }
  16.  
  17.     if(!socket_connect($sock,'127.0.0.1',3000))
  18.  {
  19.  echo "невозможно подключится";
  20.  }
  21.  
  22.  
  23.     do {
  24.         if (false === ($buf = socket_read($sock, 3000, PHP_NORMAL_READ)))
  25.          {
  26.             echo "socket_read() failed: reason: " . socket_strerror(socket_last_error($sock)) . "\n";
  27.               break;
  28.         }
  29.  
  30.  
  31.         echo "$buf\n";
  32.  
  33.     } while (true);
  34.     socket_close($sock);
  35.  
  36.  
  37. ?>
  38.  
  39.  
  40.  


Проблема в этой строчке наверно,клиент сидит на чтени и не получает пакет от сервера
($sock = socket_create(AF_INET,SOCK_DGRAM,SOL_UDP))
 
 Top
valenok Модератор
Отправлено: 27 Февраля, 2009 - 20:21:05
Post Id



Здесь могла бы быть ваша реклама


Покинул форум
Сообщений всего: 4574
Дата рег-ции: Июль 2006  
Откуда: Israel


Помог: 3 раз(а)




Agassi а ну да, а как же..


-----
Truly yours, Sasha.
 
My status
 Top
Agassi
Отправлено: 01 Марта, 2009 - 13:31:52
Post Id



Частый гость


Покинул форум
Сообщений всего: 158
Дата рег-ции: Окт. 2008  


Помог: 0 раз(а)




Мда ............
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB