|
Основной форум Сюда все проблемы связанные с программированием. |
26.02.2008, 10:50
|
#16
|
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
|
AnyKey`щик
Регистрация: 25.11.2007
Сообщений: 12
Написано 0 полезных сообщений (для 0 пользователей)
|
Ответ: Интернет
и еще такой вопрос- как из мидлета запустить встроеный браузер мобилки?
|
(Offline)
|
|
26.02.2008, 16:30
|
#18
|
Модератор
Регистрация: 03.04.2007
Сообщений: 2,252
Написано 597 полезных сообщений (для 817 пользователей)
|
Ответ: Интернет
Скорее всего, заменять класс можно только вручную-при добавлении в ресурсы получается два файла с одинаковыми именами в архиве(раньше я думал, что это невозможно). На счет запуска браузера-это можно сделать с помощью функции platform_request библиотеки Lib_m2.
|
(Offline)
|
|
21.09.2008, 11:22
|
#19
|
Знающий
Регистрация: 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
|
AnyKey`щик
Регистрация: 22.10.2008
Сообщений: 7
Написано одно полезное сообщение (для 2 участников)
|
Ответ: Интернет
чё вы паритесь есть же либа сокет, пишем сервак на дельфи, которые прослушивает определённый порт, с мобилке юзая сокет конектимся к этому внешнему серваку, и с ни обмениваемся инфой(передвижения игрока и других игроков), другие игроки так же конектятся к серваку и юзая сервак обмениваются данными о игре. Я как раз работаю над этим.
|
(Offline)
|
|
25.10.2008, 09:14
|
#21
|
Элита
Регистрация: 14.06.2008
Адрес: Украина, Киев
Сообщений: 2,273
Написано 754 полезных сообщений (для 1,833 пользователей)
|
Ответ: Интернет
WizardJIOCb, а куда ты потом свою программку на делфи поставишь? На локал? И постоянно держать включённым комп из-за одной только игры? А если инет на компе через GPRS? На хостинге тебе не позволят поставить программу на делфи. Ну как минимум понадобится какой-нибудь ооочень хороший хостинг ВДС, и то придётся платить огромные деньги.
|
(Offline)
|
|
26.10.2008, 08:00
|
#22
|
Мастер
Регистрация: 06.09.2007
Адрес: Донецк, ДНР
Сообщений: 1,023
Написано 298 полезных сообщений (для 713 пользователей)
|
Ответ: Интернет
Если уж писать сервак - так легче на PHP. Потом не будет проблем с подбором хостинга. А если писать программу на Delphi, то придется арендовать целый сервак, а это намного дороже.
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 12:26.
|