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

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

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

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

Ответ
 
Опции темы
Старый 26.02.2008, 10:50   #16
bubon
AnyKey`щик
 
Регистрация: 25.11.2007
Сообщений: 12
Написано 0 полезных сообщений
(для 0 пользователей)
Ответ: Интернет

а нельзя ли как нибуть чтоб этот класс сам заменялся?
а так спасибо. теперь строчка
addHttpHeader(conn, 'User-agent', 'by bubon');
выдает такой текст (окончание мне ненравиться)
by bubon, UNTRUSTED/1.0
раньше просто было UNTRUSTED/1.0

Последний раз редактировалось bubon, 26.02.2008 в 14:38.
(Offline)
 
Ответить с цитированием
Старый 26.02.2008, 14:40   #17
bubon
AnyKey`щик
 
Регистрация: 25.11.2007
Сообщений: 12
Написано 0 полезных сообщений
(для 0 пользователей)
Ответ: Интернет

и еще такой вопрос- как из мидлета запустить встроеный браузер мобилки?
(Offline)
 
Ответить с цитированием
Старый 26.02.2008, 16:30   #18
ViNT
Модератор
 
Регистрация: 03.04.2007
Сообщений: 2,252
Написано 597 полезных сообщений
(для 817 пользователей)
Ответ: Интернет

Скорее всего, заменять класс можно только вручную-при добавлении в ресурсы получается два файла с одинаковыми именами в архиве(раньше я думал, что это невозможно). На счет запуска браузера-это можно сделать с помощью функции platform_request библиотеки Lib_m2.
(Offline)
 
Ответить с цитированием
Старый 21.09.2008, 11:22   #19
abcdef
Знающий
 
Регистрация: 16.09.2008
Сообщений: 299
Написано 71 полезных сообщений
(для 123 пользователей)
Ответ: Интернет

[email protected]
Для организации интернет игры нужна возможность передачи данных с одного мобильника на другой, это можно сделать двумя способами:
1. прямая отправка данных: sms, клиент-сервер (знать IP-адреса).
2. какой-нить интернет-сервис по сохранению-перекачке данных.


Я тяготею ко второму способу, поэтому можно делать так:
a) использовать какой-нить серверный интерпретатор php,perl,cgi и т.д. чтобы с мобильника через методы GET/POST передавать свои данные и закачивать ответные. метод не совсем удобен т.к. нужно создавать свой сайт и делать скрипты обработки данных на стороне сервера.

b) использовать нестандартные способы коммуникации, например:

-1b) FTP (закачка данных через FTP/доступ через HTTP URL к файлу) в разделе библиотек был модуль FTP для создания файла из строки, ошибка при работе с сайтом ftp.narod.ru в библиотеке нужно переписать команду "REST" на "REST 0"



-2b) почтовый ящик (SMTP/POP) вот мой пример java-программки отправки c авторизацией через почтовик mail.ru, письма с вложенной картинкой. Получение писем через POP несколько проще, делается аналогично.
//--------smtp.java-----------
import java.io.*;
import javax.microedition.io.*;
import javax.microedition.lcdui.*;
import javax.microedition.midlet.MIDlet;

public class smtp extends MIDlet implements CommandListener
{
private Display display;
private static Form mform = new Form("smtp");
private static TextField ed_mail = new TextField("E-MAIL", "[email protected]", 256, TextField.EMAILADDR);
private static TextField ed_logn = new TextField("LOGIN", "[email protected]", 256, TextField.EMAILADDR);
private static TextField ed_pass = new TextField("PASSWORD", "my_password", 256, TextField.PASSWORD);
private static TextField ed_serv = new TextField("SERVER", "smtp.mail.ru", 256, TextField.ANY);
private static TextField ed_port = new TextField("PORT", "25", 6, TextField.NUMERIC);
private static TextField ed_text = new TextField("TEXT",
"MIME-Version: 1.0\r\n"+
"Content-Type: multipart/mixed; boundary=\"COOLHACKERS5647382910\"\r\n\r\n"+
"--COOLHACKERS5647382910\r\n"+
"Content-Type: text/plain\r\n"+
"Content-Transfer-Encoding: quoted-printable\r\n\r\n"+
"Hi see my image!\r\n\r\n"+
"--COOLHACKERS5647382910\r\n"+
"Content-Type: image/bmp; name=\"picture.bmp\"\r\n"+
"Content-Disposition: attachment; filename=\"picture.bmp\"\r\n"+
"Content-ID: <picture.bmp>\r\n"+
"Content-Transfer-Encoding: base64\r\n\r\n"+
"Qk0OAQAAAAAAAD4AAAAoAAAAOwAAABoAAAABAAEAAAAAANAAAADEDgAAxA4AAAAAAAAAAAAAAAAAAP\r\n"+
"///wD/////////4OAAAAAAAABg/////////2D/////////YP////////9g/4P9/////2D+oPH/z///\r\n"+
"YP74Af/P//9g/4AJnOczP2D+oBmc5yf/YP74GZzDJz9g/4ARnMMPP2D+oAGcmSc/YP74AZyZMz9g/4\r\n"+
"ABnP//P2D+oAGA//8/YP74Af////9g//wD/////2D//w//////YP////////9g/////////2D/////\r\n"+
"////YP////////9g/////////+D/////////4P/////////g\r\n"+
"--COOLHACKERS5647382910--\r\n",
10240, TextField.ANY);
private static TextField ed_debg = new TextField("DEBUG", "", 10240, TextField.ANY);
private static Command sendCmd = new Command("SEND", Command.SCREEN, 2);
private static Command exitCmd = new Command("EXIT", Command.SCREEN, 2);
//-------------------//
private static StreamConnection connection = null;
private static DataInputStream in = null;
private static DataOutputStream out = null;
public  static final String CRLF = "\r\n";
private static final String b64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";

public smtp() {
  display=Display.getDisplay(this);
}


public void startApp() {
  mform.append(ed_mail);
  mform.append(ed_logn);
  mform.append(ed_pass);
  mform.append(ed_serv);
  mform.append(ed_port);
  mform.append(ed_text);
  mform.append(ed_debg);
  mform.addCommand(sendCmd);
  mform.addCommand(exitCmd);
  mform.setCommandListener(this);
  display.setCurrent(mform);
}


public void pauseApp(){
}


public void destroyApp(boolean destroy) {
}


public void commandAction(Command c, Displayable d) {
  if(c==sendCmd){
    ed_debg.setString("");
    if (SMTPconn(ed_serv.getString(),ed_port.getString(),ed_logn.getString(),ed_pass.getString())==0){
      if (SMTPsend("", ed_logn.getString(), "", ed_mail.getString(), "", ed_text.getString())==0)
        debug("MAIL SEND!!!");
      else
        debug("FTALL ERROR");
    }
    SMTPdisc();
  }
  if(c==exitCmd){
    destroyApp(false);
    notifyDestroyed();
  }
}

//-------------------//

private void debug(String s) {
  ed_debg.setString(ed_debg.getString()+s+(char)10);
}


private boolean check(String s,String ok,String msg)
{
  //Проверяем код который вернул сервер.
  if (s == null || !s.trim().startsWith(ok)) {
    debug("ERROR: " + msg + ":" + s);
    return false;
  }
  return true;
}


private String readLine() {
  StringBuffer buf = new StringBuffer("");
  try{
    byte[] b = new byte[1];
    in.read(b);
    do {
      while (b[0] != 13) {
        buf.append( (char) b[0]);
        in.read(b);
      }
      in.read(b);
    } while (in.available()!=0);
  }catch(Exception e) {}
  String s = buf.toString();//+readLineEnd();
  debug("S:"+s);
  return s;
}


private void writeLine(String s) {
  debug("U:"+s);
  byte[] b = s.getBytes();
  try{
    out.write(b, 0, b.length);
  }catch(Exception e) {}
}


String enBASE64(String s) {
  byte[] b = s.getBytes();
  StringBuffer buf = new StringBuffer((b.length/3+6)*4);
  int n;
  int i;
  for(i=0; i<b.length-2; i=i+3) {
    n = (b[i] << 16) + (b[i+1] << 8) + b[i+2];
    buf.append(b64.charAt((n >> 18) & 0x3f));
    buf.append(b64.charAt((n >> 12) & 0x3f));
    buf.append(b64.charAt((n >> 6) & 0x3f));
    buf.append(b64.charAt(n & 0x3f));
  }
  switch (b.length%3) {
  case 1:
      n = (b[i] << 16);
      buf.append(b64.charAt((n >> 18) & 0x3f));
      buf.append(b64.charAt((n >> 12) & 0x3f));
      buf.append("==");
      break;
  case 2:
      n = (b[i] << 16) + (b[i+1] << 8);
      buf.append(b64.charAt((n >> 18) & 0x3f));
      buf.append(b64.charAt((n >> 12) & 0x3f));
      buf.append(b64.charAt((n >> 6) & 0x3f));
      buf.append("=");
      break;
  }
  return buf.toString();
}


String deBASE64(String s) {
  while (s.endsWith("=")) s=s.substring(0, s.length()-2);
  byte[] b = s.getBytes();
  int len = b.length-(b.length%4);
  StringBuffer buf = new StringBuffer((len+2)*3+16);
  int n;
  int i;
  for(i=0; i<len; i=i+4) {
    n = (b64.indexOf(b[i]) << 18) + (b64.indexOf(b[i+1]) << 12) +
        (b64.indexOf(b[i+2]) << 6) + b64.indexOf(b[i+3]);
    buf.append((char)((n >> 16) & 0xff));
    buf.append((char)((n >> 8) & 0xff));
    buf.append((char)((n) & 0xff));
  }
  switch (b.length%4) {
  case 2:
    n = (b64.indexOf(b[i]) << 18) + (b64.indexOf(b[i+1]) << 12);
    buf.append((char)((n >> 16) & 0xff));
    break;
  case 3:
    n = (b64.indexOf(b[i]) << 18) + (b64.indexOf(b[i+1]) << 12) +
        (b64.indexOf(b[i+2]) << 6);
    buf.append((char)((n >> 16) & 0xff));
    buf.append((char)((n >> 8) & 0xff));
    break;
  }
  return buf.toString();
}

//------------------//

public int SMTPconn(String smtpServer,String port,String login,String pass) {
  try {
    //открываем соединение с smtp сервером
    //в соответсвие с CLDC String, параметр должен соответсвовать
    //следующей схеме: "protocol:address;parameters"
    connection = (StreamConnection) Connector.open("socket://" + smtpServer +
        ":" + port);
    //получаем поток из которого будем читать данные
    in = connection.openDataInputStream();
    //получаем поток в который будем писать данные
    out = connection.openDataOutputStream();
    //После установления соединение, сервер сообщает о себе
    //и как бы приглашает нас к себе.
    //Например: '220 BBN-UNIX.ARPA
    //Simple Mail Transfer Service Ready'
    if (!check(readLine(), "220", "server is not ready:")) return -2;
    //Теперь мы здороваемся с сервером.
    //(По хорошему, мы должны послать ему информацию о себе,
    //а не его же адрес, как делается ниже)
    writeLine("EHLO " + smtpServer + CRLF);
    //Читаем ответ. Например:
    //s:250-mx6.mail.ru Hello server [111.11.11.111]
    //s:250-SIZE 10485760
    //s:250-8BITMIME
    //s:250-AUTH PLAIN LOGIN
    //s:250 PIPELINING
    if (!check(readLine(), "250", "server is not ready:")) return -3;
    writeLine("AUTH LOGIN" + CRLF);
    if (!check(readLine(), "334", "server is not AUTH LOGIN:")) return -4;
    writeLine(enBASE64(login) + CRLF);
    if (!check(readLine(), "334", "server is not LOGIN:")) return -5;
    writeLine(enBASE64(pass) + CRLF);
    if (!check(readLine(), "235", "server is not PASS:")) return -6;
  } catch (IOException io){return -1;}
  return 0;
}

public int SMTPsend(String displayFromName,String fromName,
           String displayToName,String mailTo,String subject,String body) {
  //==============MAIL===============
  //Теперь, после соблюдения всех формальностей,
  //начинаем отсылать письмо.
  //Для этого необходимо открыть smtp транзакцию.
  //Транзакция состоит из 3 шагов.
  //1 шаг транзакции это комманда MAIL,
  //которая предоставляет информацию об отправителе.
  if (fromName != null && fromName.trim().length() != 0)
    writeLine("MAIL FROM: <" + fromName + ">" + CRLF);
  else
    writeLine("MAIL FROM: < > "+CRLF);
  if (!check(readLine(), "250", "MAIL error")) return -1;
  //===============RCPT===========================
  //2 шаг это состоит из одной или болле комманд RCPT,
  //которая предоставляет информацию серверу,
  //кому мы посылаем письмо.
  writeLine("RCPT TO: <" + mailTo + ">" + CRLF);
  if (!check(readLine(), "250", "RCPT error")) return -2;
  //===============DATA========================
  //3 шаг транзакции это комманда DATA.
  //После успешного выполнения этой комманды мы
  //мы сможем посылать наше письмо.
  writeLine("DATA"+CRLF);
  if (!check(readLine(), "354", "DATA error")) return -3;
  //===============FROM=========================
  //Посылаем mail адрес отправителя письма.
  //Почему снова отсылается
  //адрес отправителя письма, читайте RFC 821
  if(displayFromName!=null&&displayFromName.trim().length()!=0)
    writeLine("From: "+displayFromName +"<" + fromName + ">"+CRLF);
  else
    writeLine("From: <" + fromName + ">"+CRLF);
  //=================TO=========================
  //Посылаем mail адрес получателя письма.
  //Почему снова отсылается
  //адрес получателя письма, читайте RFC 821
  if(displayToName!=null&&displayToName.trim().length()!= 0)
    writeLine("To: " + displayToName + "<" + mailTo + ">"+ CRLF);
  else
    writeLine("To: <" + mailTo + ">"+CRLF);
  //==============TITLE==============
  //Посылаем тему письма.
  writeLine("Subject:" + (subject != null? subject: "") + CRLF);
  //==============BODY==============
  //Посылаем тело письма.
  if (body != null && body.length() != 0)
    writeLine(body+CRLF);
  //====================QUIT========================
  //Теперь сигнализируем серверу о том,
  //что тело письма закончилось.
  writeLine(CRLF + "." + CRLF);
  if (!check(readLine(), "250", "End letter error")) return -4;
  //Прощаемся с сервером.
  writeLine("QUIT" + CRLF);
  //Читаем ответ сервера.
  //Например: '221 BBN-UNIX.ARPA
  //Service closing transmission channel'
  if (!check(readLine(), "221", "QUIT error")) ;
  return 0;
}

public void SMTPdisc() {
  //Закрываем потоки и сокет.
  if (in != null)  try {in.close();} catch (IOException ex) {}
  if (out != null) try {out.close();} catch (IOException ex) {}
  if (connection != null) try {connection.close();} catch (IOException ex) {}
  in = null;
  out = null;
  connection = null;
}

}

Последний раз редактировалось SBJoker, 25.10.2008 в 01:01.
(Offline)
 
Ответить с цитированием
Старый 24.10.2008, 21:20   #20
WizardJIOCb
AnyKey`щик
 
Регистрация: 22.10.2008
Сообщений: 7
Написано одно полезное сообщение
(для 2 участников)
Ответ: Интернет

чё вы паритесь есть же либа сокет, пишем сервак на дельфи, которые прослушивает определённый порт, с мобилке юзая сокет конектимся к этому внешнему серваку, и с ни обмениваемся инфой(передвижения игрока и других игроков), другие игроки так же конектятся к серваку и юзая сервак обмениваются данными о игре. Я как раз работаю над этим.
(Offline)
 
Ответить с цитированием
Старый 25.10.2008, 09:14   #21
Phantom
Элита
 
Аватар для Phantom
 
Регистрация: 14.06.2008
Адрес: Украина, Киев
Сообщений: 2,273
Написано 754 полезных сообщений
(для 1,833 пользователей)
Ответ: Интернет

WizardJIOCb, а куда ты потом свою программку на делфи поставишь? На локал? И постоянно держать включённым комп из-за одной только игры? А если инет на компе через GPRS? На хостинге тебе не позволят поставить программу на делфи. Ну как минимум понадобится какой-нибудь ооочень хороший хостинг ВДС, и то придётся платить огромные деньги.
(Offline)
 
Ответить с цитированием
Старый 26.10.2008, 08:00   #22
odd
Мастер
 
Аватар для odd
 
Регистрация: 06.09.2007
Адрес: Донецк, ДНР
Сообщений: 1,023
Написано 298 полезных сообщений
(для 713 пользователей)
Ответ: Интернет

Если уж писать сервак - так легче на PHP. Потом не будет проблем с подбором хостинга. А если писать программу на Delphi, то придется арендовать целый сервак, а это намного дороже.
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Онлайн (Клиент <-> Сервер) butcher 2D-программирование 24 21.09.2009 20:11
Во сколько оценивается создание интерне& Nunan Болтовня 3 28.10.2008 14:33
Зацените проект mr.DIMAS 3D-программирование 22 17.10.2008 12:02
Игра через интернет Черный Лорд 3D-программирование 6 13.06.2008 18:51
А вот и ещё тема по текстурированию ландшk CRASHER Создание текстур 4 16.01.2008 18:10


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


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