Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для мобильных телефонов > MidletPascal > Основной форум

Основной форум Сюда все проблемы связанные с программированием.

Ответ
 
Опции темы
Старый 02.07.2009, 00:10   #1
Krechet
AnyKey`щик
 
Регистрация: 01.07.2009
Сообщений: 3
Написано 0 полезных сообщений
(для 0 пользователей)
Передача данных м/у телефонами

Можно ли на MP написать программу, позволяющую двум телефонам обмениваться данными не через блютуз или инфракрасник, а например через HTTP соединение? Обязателен ли для этого сторонний сервер или в качестве сервера может выступать один из телефонов?
(Offline)
 
Ответить с цитированием
Старый 02.07.2009, 01:31   #2
Bruteo
ПроЭктировщик
 
Регистрация: 31.01.2007
Сообщений: 128
Написано 20 полезных сообщений
(для 43 пользователей)
Ответ: Передача данных м/у телефонами

Можно при наличии сервера.
С помощью mp не удастся создать приложение, которое сможет ожидать соединения.
(Offline)
 
Ответить с цитированием
Старый 02.07.2009, 09:00   #3
Krechet
AnyKey`щик
 
Регистрация: 01.07.2009
Сообщений: 3
Написано 0 полезных сообщений
(для 0 пользователей)
Ответ: Передача данных м/у телефонами

Хм, нашел вот такой пост в теме про библиотеку Lib_socket:
В MIDP2 есть класс ServerSocketConnection. Он позволяет создать серверное соединение и ждать подключения.
У него есть метод getLocalAdress(), которая возвращает IP адрес сервера. Единственная сложность, что адрес назначается динамически и его надо сообщать клиенту каким-то образом.
ServerSocketConnection это стандартный класс Midlet Pascal'я? Как его использовать? Можно маленький примерчик?
Заранее спасибо
(Offline)
 
Ответить с цитированием
Старый 03.07.2009, 17:49   #4
Serg153
Нуждающийся
 
Регистрация: 03.01.2009
Сообщений: 93
Написано 8 полезных сообщений
(для 15 пользователей)
Ответ: Передача данных м/у телефонами

Можно при наличии сервера.
С помощью mp не удастся создать приложение, которое сможет ожидать соединения.
это решается путём создания PHP скрипта - который можно разместить на бесплатном хостинге (есть пример в инете Арена) Телефон который выступает в качестве сервера - посылает туда Пост сообщение, а скрипт вычленяет ИП адрес телефона и заносит время и адрес в табличку...
клиентский телефон - считывает последнюю запись и уже по полученному ИП производит соеденение с телефоном Сервером....
---
ServerSocketConnection это стандартный класс Midlet Pascal'я? Как его использовать? Можно маленький примерчик?
Заранее спасибо
в принципе в библиотеке НЕДОДЕЛАНО реализация сокет соеденения в ОТДЕЛЬНОМ потоке... телефон зависает при попытке соеденения...
pilgrim обещал вроде доделать либу в отдельном потоке... но???хз..
---
вот пример...
program NewProject;

uses socket;

var 
  OpenState: integer; 
  SendState: integer; 
  RecvString: string;
	i:integer;
begin
//Открываем соединение
  OpenState:= Socket.Open('socket://127.0.0.1:2007');

for i:=0 to 10 do begin
//Отправляем строку
  if  OpenState = 0 then  begin
			SendState:= Socket.WriteStr('test');
			//Ждем немного
			Delay(1000);
			RecvString:= '';
			//Читаем входной буфер
			while Socket.Available > 0 do RecvString:= RecvString + Chr(Socket.Read);
	end; else begin
		//Открываем соединение
		OpenState:= Socket.Open('socket://127.0.0.1:2007');
	end;
	Delay(1000);
end;

	drawText(RecvString, 0, 0);
	drawText('Принято - ' + IntegerToString(Socket.BytesRX), 0, 15);
	drawText('Отправлено - ' + IntegerToString(Socket.BytesTX), 0, 30);
	drawText('Всего - ' + IntegerToString(Socket.BytesRX + Socket.BytesTX), 0, 45);
	repaint;	
	delay(10000);
	
//Закрываем
	Socket.Close;
end.
я на дельфях сделал простой сокет-сервер - запускал пример на Эмуляторе - там всё работает...
на телефоне при подключении к выделенному серверу - телефон зависает...
(Offline)
 
Ответить с цитированием
Старый 03.07.2009, 18:05   #5
Serg153
Нуждающийся
 
Регистрация: 03.01.2009
Сообщений: 93
Написано 8 полезных сообщений
(для 15 пользователей)
Ответ: Передача данных м/у телефонами

приведу выдержки и цитаты как организовать игровой интернет сервер...
----
Итак, имеем в Интернете домен на котором размещен наш скрипт "арены".
Есть игра-клиент, которой нужно узнать кол-во доступных серверов, и при необходимости создать свой.

Что нам нужно от "арены"? Всего-навсего получить список серверов в виде "IPort IPort IPort..." и зарегистрировать новый.
Как это будет происходить? Да очень просто! Посредством HTTP запросов.
- Легко разместить такую арену в локальной сети;
- Не требует восстановления после различных ЧП .

Реализация
В этом разделе описаны основные процедуры необходимые для воплощения нашей мечты в реальность. Работа с ареной делится на 2 части:
1) Подача HTTP запросов и обработка ответов игрой;
2) Обработка запроса скриптом на арене.

Всего будет 2 вида запросов: view и ping.
VIEW необходим для получения списка серверов. Будет выглядеть следующим образом:
Запрос: http://host/?action=arena&mode=view.
Ответ : 212.100.15.45:25666 192.10.38.212:25666.
Т.е. в ответе мы видим, что на данный момент на арене находятся 2 сервера на портах 25666.

PING для оповещения арены о том что сервер жив и удалять его из списка пока нет никакой необходимости. Вы могли заметить то, что нет запроса на регистрацию сервера на арене, т.к. в качестве регистрации выступает постоянный "ping" посылаемый им. Сам же запрос "ping" следует посылать раз в несколько десятков секунд (20-40).
Запрос: http://host/?action=arena&mode=ping&port=25666
Ответ нам абсолютно не нужен .
Реализация на стороне интернет сервера
Итак, с игрой разобрались, теперь осталось написать скрипт!
В запросах мы посылаем ключевое слово "action=arena" благодаря чему помимо арены на данном домене может висеть полноценный сайт.
Для того, чтобы определить адресуется ли данный запрос арене, в index.php необходимо (желательно в самом начале) написать следующее:

 if ($action == 'arena')
 {
  include 'arena.php';
  die();
 }
Это означает, что в случае того, когда захотят "пообщаться" с ареной, будет запущен скрипт арены для обработки запроса и дальнейшее выполнение скрипта index.php прекратится.

А вот и сам код arena.php:


 <?php
  //В этом файле будет храниться список активных серверов
  $list_file = 'db/arena_list.txt';
  // Узнаем IP адрес отправителя запроса
  $ip = $_SERVER['REMOTE_ADDR'];
  // Читаем номер порта из запроса
  $port = intval($_REQUEST['port']);
  // Это от хитрых кулхацкеров ;)
  if (!($port >= 1024 && $port <= 65500))
   $port = 25666;
  // Читаем файл-список
  $lst = file($list_file);
  // В переменной $time теперь хранится текущее время
  $time = time();
  $j = -1;
  $i = 0;
  // Удаляем “мертвецов” и попутно ищем адрес отправителя
  // в этом списке
  while ($i < count($lst)) {
   $lst[$i] = trim($lst[$i]);
   list($l_ip, $l_port, $l_time) = explode(":", $lst[$i]);
   // Если время с предыдущего пинга превысило 45 секунд
   // – его явно уже нет
   if ($l_time < ($time - 45)) {
    for ($t = $i; $t < count($lst) - 1; $t++)
     $lst[$t] = $lst[$t + 1];
    unset($lst[count($lst) - 1]);
    continue;
   }
   if ($l_ip == $ip) $j = $i;
   $i++;
  }

  // Обработка запроса
  switch ($mode) {
   case 'view':
    for ($i = 0; $i < Count($lst); $i++) {
     // Вывод очередного IP:Port из списка
     list($l_ip, $l_port, $l_time) = explode(":", $lst[$i]);
     echo $l_ip.':'.$l_port.' ';
    }
    break;
   case 'ping':
    if ($j == -1)
     // Если пингуется впервые, значит новый сервер - добавляем
     array_push($lst, $ip.':'.$port.':'.$time);
    else {
     // Обновляем информацию для сервера
     // Заметьте, что при смене порта на сервере
     // на арене он тоже изменится
     list($l_ip, $l_port, $l_time) = explode(":", $lst[$j]);
     $lst[$j] = $l_ip.':'.$port.':'.$time;
     }
    break;
  }

  // Обновляем список серверов в файле-списке
  $f = fopen($list_file, "a+");
  flock($f, LOCK_EX);
  ftruncate($f, 0);
  for ($i = 0; $i < count($lst); $i++)
   fwrite($f, $lst[$i]."\n");
  fflush($f);
  flock($f, LOCK_UN);
  fclose($f);
 ?>
Файл со списком серверов должен находиться в "db/arena_list.txt" с атрибутами разрешающими его изменение.

....
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Krechet (06.07.2009)
Старый 06.07.2009, 12:25   #6
Krechet
AnyKey`щик
 
Регистрация: 01.07.2009
Сообщений: 3
Написано 0 полезных сообщений
(для 0 пользователей)
Ответ: Передача данных м/у телефонами

Ух, спасибо Serg153 за подробное описание
(Offline)
 
Ответить с цитированием
Старый 06.07.2009, 19:22   #7
demon112
Знающий
 
Регистрация: 18.03.2009
Сообщений: 223
Написано 10 полезных сообщений
(для 17 пользователей)
Ответ: Передача данных м/у телефонами

Дык как я понял с имеющейся либой сокет не удасться создать такое приложение, пока либу не доделают?


А по хттп ничего неудасться сделать?
__________________
И суслики вам не помогут
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
передача данных через GPRS Mirik1 MidletPascal 22 01.02.2010 21:17
CSD передача данных на комьютер Mirik1 MidletPascal 8 07.11.2009 14:35
Чтение данных из потоков и передача их в функцию Жека FAQ и уроки 4 26.10.2009 15:03
Списки данных HolyDel C++ 24 12.04.2007 22:46
Вынос данных. johnk Blitz3D 6 04.03.2007 17:27


Часовой пояс GMT +4, время: 16:17.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com