Thứ Hai, 28 tháng 1, 2013

Biết làm gì nữa bây giờ

Sắp tới tết rồi, chỉ còn có hơn mười ngày nữa. Năm nay tôi không có thời gian nghỉ tết dài nữa, tôi không có nhiều thời gian dành cho mình nữa, hay là tôi thấy thời gian là không đủ cho mình, tôi không biết.... Dù sao đi nữa thì sống và làm được những thứ mà mình muốn là tốt lắm rồi, sau này có nghĩ lại cũng chằng có gì phải hối tiếc. Điều mà tôi cảm thấy buồn nhất trong cuộc đời mình là tôi quá ích kỷ với chính bản thân mình, mọi người cũng nghĩ tôi như vậy. điều đó làm tôi thấy mình luôn cô đơn và không bao giờ thoát ra khỏi đó được. Hãy nghĩ, có những thứ mình suy nghĩ như chẳng bao giờ lý giải được là vì lý do gì, giống như khi bạn nhìn vào bầu trời đêm và thấy đó là một thứ xa xôi vô tận vậy. Cảm nhận của con người cũng vậy thôi, đó là thứ không thể nào lý giải nỗi. tôi thật sự không muốn mình mãi đơn độc, nhưng vì một lý do gì đó tôi vẫn khép mình trong vòng tròn của mình. Sau này nếu có một thay đổi nào khác tôi cũng không nghĩ về thay đổi bản thân mình, và tôi thật sự không muốn đánh đổi cuộc sống hiện tại của mình chút nào, dù rằng tôi chỉ có một mình nhưng tôi không cảm thấy khó chịu nhiều. Tôi thường hay tin tưởng vào những lời nói bâng quơ của những người xung quanh tôi, rồi cho đến khi tôi biết rằng những lời đó có thể chỉ là một lời trêu chọc không hơn không kém. Tôi cũng sợ khi có ai đó nói điều gì với mình và tôi không bao giờ còn trông mong chúng sẽ trở thành hiện thực nưa. Có bao giờ bạn nghĩ đến cảm giác chờ đợi về một điều gì mà không bao giờ tới. Tôi sợ mình sẽ làm điều tương tự, tôi không nói chắc những gì mà tôi sẽ làm, nếu như không làm được hay là tôi quên đi thì thật là một điều thất vọng. Tôi chỉ nhớ tới mà có thể là ai cũng nhớ tới những thứ làm cho mình cảm thấy khó chịu, không hoặc ít khi nghĩ tới những việc mình làm cho người khác khó chịu. dù sao thì cuối cùng, sẽ có ngày ta cũng nhớ tới tất cả, mong là không quá muộn để làm điều đó cuối cùng.

Chủ Nhật, 27 tháng 1, 2013

nhận thông tin từ những người chơi khác

Bài này sẽ là kết thúc của hướng dẫn về sự kết hợp giữa php và j2me, những ứng dụng trực tuyến ngày càng cho thấy hiệu quả của nó trong thời đại công nghệ thông tin. Bạn không thể nào thiếu internet trong một ngày và chiếc di động là thứ hỗ trợ đắc lực nhất, ứng dụng web luôn không làm cho người sử dụng phải nhàm chán vì tính mới mỗi ngày của nó. Tôi cũng kì vọng vào sức mạnh của di động như về j2me thì không còn nhiều nữa, ngày nay android và ios ngày càng chiếm lĩnh trên thị trường di động nhất là android. Có thể một ngày nào đó những bài viết này chỉ là vô ích, nhưng ít nhất là tôi đã viết nó, bằng những kiến thức của mình và hy vọng điều gì đó. Do form get.html và server.php mà tôi đã viết có sự lựa chọn để chỉ hiện thị thông tin về những người chơi khác chứ không cho phép lấy về thông tin của nhân vật của ta. Do đó, ít nhất bạn phải có thêm một ai đó nữa cùng đăng nhập vào một id khác thì các bạn mới nhìn thấy kết quả của việc nhận dữ liệu. Ta thêm một biến dt (String) nữa và sẽ nhận dữ liệu vào đây, đồng thời vẽ ra màn hình. Class canvas sẽ thành thế này: mog.java
C:\Users\thanhliem\Documents\NetBeansProjects\mog\src\mog.java
class canvas extends Canvas{
//biến nhận dữ liệu của các id khác
    String dt;
textfield tf;
Vector rb=new Vector();
Font f=Font.getFont(0,0,8);
int w,h,k=0,fh;
String command="";
//tạo ra một biến robot để làm nhân vật của ta, tại vị trí (0,0)
robot me=new robot(0,0);
public canvas(){
setFullScreenMode(true);
w=getWidth();
h=getHeight();
fh=f.getHeight();
tf=new textfield("command",0,0,w);
}
public void paint(Graphics g){
g.setFont(f);
g.setColor(0);
g.fillRect(0,0,w,h);
tf.paint(g,k,true);
g.setColor(0xf0f0);
g.setClip(0,0,w,h);
g.drawString(command,0,fh*2,Graphics.TOP|Graphics.LEFT);
//vẽ thông tin lên màn hình,
if(dt!=null)
g.drawString(dt,0,h,Graphics.LEFT|Graphics.BOTTOM);
if(rb!=null)
for(int i=0;i<rb.size();i++)
((robot)rb.elementAt(i)).paint(g);
//vẽ nhân vật chúng ta lên canvas qua hàm paint của class robot
me.paint(g);
k=0;
repaint();
}
public void keyPressed(int k){
this.k=k;
if(k==-5){
command=tf.getString();
String[] acommand=tach(command,".");
Vector trb=new Vector();
for(int i=0;i<acommand.length;i++){
    String[] info=tach(acommand[i],",");
    robot nrb=new robot(w/2,h/2);
    for(int j=0;j<rb.size();j++){
    if(info[0].equals(((robot)rb.elementAt(j)).say)){nrb=(robot)rb.elementAt(j);
    System.out.println("dectect");}}
    nrb.getcommand(info);
trb.addElement((robot)nrb);}
rb=trb;}
//ta thêm đoạn này để điều khiển trực tiếp biến me (robot) thông qua nhấn phím
if(k==-4){me.nx=me.x+5;}
if(k==-3){me.nx=me.x-5;}
if(k==-2){me.ny=me.y+5;}
if(k==-1){me.ny=me.y-5;}
}
public void keyReleased(int k){this.k=0;}

public String[] tach(String s,String c){
Vector v=new Vector();
if(!s.endsWith(c)){s+=c;}
int st=0,np=s.indexOf(c,st);
while(np!=-1){
v.addElement((String)s.substring(st,np));
st=np+c.length();
np=s.indexOf(c,st);}
String[] rt=new String[v.size()];
v.copyInto((String[])rt);
for(int i=0;i<rt.length;i++){System.out.println(rt[i]+rt[i].length());}
return rt;}
}

class robot{
int x,y,nx,ny;
String say;
long lm=0;
public robot(int x,int y){
this.x=x;
this.y=y;
this.nx=x;
this.ny=y;
}
public void getcommand(String[] s){
say=s[0];
nx=Integer.parseInt(s[1]);
ny=Integer.parseInt(s[2]);
}
public void paint(Graphics g){
if(System.currentTimeMillis()-lm>200)
move();
g.setColor(0xf000f0);
g.fillRect(x,y,16,16);
}

void move(){
x+=x>nx?-1:(x==nx?0:1);
y+=y>ny?-1:(y==ny?0:1);}
}
Đồng thời mog.java cũng thay đổi như sau đây: mog.java
C:\Users\thanhliem\Documents\NetBeansProjects\mog\src\mog.java
public class mog extends MIDlet implements Runnable{
    //tạo biến nhận giá trị của user và pass
    String user,pass;
    
    //id là giá trị của trả về ứng với mỗi user có một số id riêng biệt
    int id,mode=0;
    canvas cv=new canvas();
public void startApp(){
    //chúng ta cho hiển thị form login là một class mở rộng từ class Form
Display.getDisplay(this).setCurrent(new login(this));}
public void destroyApp(boolean t){}
public void pauseApp(){}
//hàm cv này dùng để nhận giá trị từ login.java sau khi đã thực hiện nhấn lệnh ok 
public void cv(String user,String pass){
    this.user=user;
    this.pass=pass;
    //hàm send trả về dữ liệu lấy từ server là id nhưng có kèm theo mã BOM của utf-8
   String st= send("http://holyeyed.99k.org/game/server.php","submit=2&user="+user+"&pass="+pass);
   //nếu như trả về dữ liệu khác null thì cho hiện canvas.
   id=Integer.parseInt(st.substring(3));
   if(id>0){
Display.getDisplay(this).setCurrent(cv);
//chuyển mode sang 3, và cho khởi động thread
mode=3;
   new Thread(this).start();}}
//khi thread khởi động nó sẽ không dừng lại
public void run(){
    while(true){
        try{
            //cho ngừng một khoảng thời gian (500millis) sau mỗi lần gửi thông tin lên server
            Thread.sleep(500);
switch(mode){
    case 1:
break;
    case 2:
break;
    case 3:
        //thông qua hàm send gửi các thông tin gồm: id, mess, x, y lên server.
        send("http://holyeyed.99k.org/game/server.php","submit=3&id="+id+"&mess=holyeyed&x="+cv.me.x+"&y="+cv.me.y);
//cùng lúc gửi thông tin lên server, ta cho nhận dữ liệu về luôn một thể, submit=4 cùng với id
        cv.dt=send("http://holyeyed.99k.org/game/server.php","submit=4&id="+id);
        break;}}catch(Exception e){}}}
//hàm send dùng thực hiện kết nối, nhận 2 tham số là địa chỉ web và các thông số gửi đi
String send(String add,String para){
try{
HttpConnection hc=(HttpConnection)Connector.open(add);
//set method giống với form trên server
hc.setRequestMethod(HttpConnection.POST);
//khi method là POST thì phải có content-type
hc.setRequestProperty("Content-Type", 
           "application/x-www-form-urlencoded");
//phần sau là đọc và trả về chuỗi
OutputStream os=hc.openOutputStream();
os.write(para.getBytes());
InputStream is=hc.openDataInputStream();
int c;
StringBuffer sb=new StringBuffer();
while((c=is.read())!=-1){sb.append((char)c);}
is.close();
os.close();
hc.close();
System.out.println(sb.toString());
return sb.toString();
}catch(Exception e){}
return null;}}
Kết quả ta được như sau:
Bây giờ ta sẽ chuyển dt (String) trong cv (canvas) thì mã lệnh dùng cho điều khiển các biến robot như ta đã làm lúc trước, dữ liệu nhận về như bạn thấy trên hình trên bao gồm: Mã BOM | id | user name | chuỗi | x | y # id | username | chuỗi | x |y #.... Class robot.java của ta sẽ thay đổi để nhận thêm nhiều giá trị hơn như sau: mog.java
C:\Users\thanhliem\Documents\NetBeansProjects\mog\src\mog.java
class robot{
int x,y,nx,ny,id;
String say,user;
long lm=0;
//class robot bây giờ có 4 tham số khởi tạo: id, user, x ,y
public robot(int id,String user,int x,int y){
    this.id=id;
    this.user=user;
this.x=x;
this.y=y;
this.nx=x;
this.ny=y;
}
public void getcommand(String[] s){
say=s[2];
nx=Integer.parseInt(s[3]);
ny=Integer.parseInt(s[4]);
}
public void paint(Graphics g){
if(System.currentTimeMillis()-lm>200)
move();
g.setColor(0xf000f0);
g.fillRect(x,y,16,16);
//vẽ thêm username cho dễ phân biệt
g.drawString(user,x,y-16,Graphics.TOP|Graphics.LEFT);
}

void move(){
x+=x>nx?-1:(x==nx?0:1);
y+=y>ny?-1:(y==ny?0:1);}

}
Trong canvas.java cũng có những thay đổi, cụ thể là ta tách việc [phân tích dữ liệu gửi về vào hàm khac(), và cho vào trong vòng lặp paint(g), như vậy sẽ làm cho mọi thứ trở nên liên tục hơn. Ta cũng cần chú ý, bây giờ khởi tạo biến robot phải cần tới 4 tham số, cho nhân vật của ta có id=0, user=”me”, x=0, y=0: mog.java
C:\Users\thanhliem\Documents\NetBeansProjects\mog\src\mog.java
class canvas extends Canvas{
//biến nhận dữ liệu của các id khác
    String dt;
textfield tf;
Vector rb=new Vector();
Font f=Font.getFont(0,0,8);
int w,h,k=0,fh;
String command="";
//tạo ra một biến robot để làm nhân vật của ta, tại vị trí (0,0)
robot me=new robot(0,"me",0,0);
public canvas(){
setFullScreenMode(true);
w=getWidth();
h=getHeight();
fh=f.getHeight();
tf=new textfield("command",0,0,w);
}
public void paint(Graphics g){
    //sử dụng hàm khác để phân tích thông tin gửi về.
    khac();
g.setFont(f);
g.setColor(0);
g.fillRect(0,0,w,h);
tf.paint(g,k,true);
g.setColor(0xf0f0);
g.setClip(0,0,w,h);
g.drawString(command,0,fh*2,Graphics.TOP|Graphics.LEFT);
//vẽ thông tin lên màn hình,
if(dt!=null)
g.drawString(dt,0,h,Graphics.LEFT|Graphics.BOTTOM);
if(rb!=null)
for(int i=0;i<rb.size();i++)
((robot)rb.elementAt(i)).paint(g);
//vẽ nhân vật chúng ta lên canvas qua hàm paint của class robot
me.paint(g);
k=0;
repaint();
}
public void keyPressed(int k){
this.k=k;

//ta thêm đoạn này để điều khiển trực tiếp biến me (robot) thông qua nhấn phím
if(k==-4){me.nx=me.x+5;}
if(k==-3){me.nx=me.x-5;}
if(k==-2){me.ny=me.y+5;}
if(k==-1){me.ny=me.y-5;}
}
public void keyReleased(int k){this.k=0;}

public String[] tach(String s,String c){
Vector v=new Vector();
if(!s.endsWith(c)){s+=c;}
int st=0,np=s.indexOf(c,st);
while(np!=-1){
v.addElement((String)s.substring(st,np));
st=np+c.length();
np=s.indexOf(c,st);}
String[] rt=new String[v.size()];
v.copyInto((String[])rt);
for(int i=0;i<rt.length;i++){System.out.println(rt[i]+rt[i].length());}
return rt;}
//hàm này dùng chuyển nhanh chuỗi thành số nguyên.
int toint(String s){return Integer.parseInt(s);}
//ta thêm một hàm khac với việc phân tích dữ liệu nhận về và vẽ những thông tin đó ra
void khac(){
    //nếu như thông tin nhận về khác null, và dài hơn 3
    if(dt!=null&&dt.length()>3){
 //bỏ mã BOM, lấy từ kí tự thứ 3
command=dt.substring(3);
//tách ra thành những nhân vật khác nhau, cách nhau bằng dấu #
String[] acommand=tach(command,"#");
//tạo một Vector mới để nhận giá trị
Vector trb=new Vector();
for(int i=0;i<acommand.length;i++){
    //tách thông tin cho mỗi nhân vật, cách nhau bằng dấu |
    String[] info=tach(acommand[i],"|");
    if(info!=null){
        //biến robot bây giờ có tới 4 tham số khởi tạo: id, user , x, y
    robot nrb=new robot(toint(info[0]),info[1],toint(info[3]),toint(info[4]));
    //kiểm tra nếu như mà có id nào trong Vector cũ thì dùng lại thông tin đó.
    for(int j=0;j<rb.size();j++){
        //ta so sánh id để chắc là duy nhất id đó đại diện cho người chơi đó
    if(Integer.parseInt(info[0])==(((robot)rb.elementAt(j)).id)){nrb=(robot)rb.elementAt(j);
    System.out.println("dectect");}}
    nrb.getcommand(info);
    //thêm vào Vector mới
trb.addElement((robot)nrb);}}
//cho Vector mới bằng Vector rb
rb=trb;}}
Như vậy là xong, rủ ai đó cùng test ứng dụng, bạn sẽ thấy mọi thứ hoạt động khá tốt. source project jar test

Thứ Bảy, 12 tháng 1, 2013

Gửi thông tin đến server theo từng đợt

Bài trước chúng ta đã có thể đăng nhập vào một hệ thống thành viên đơn giản, code trước tôi cũng đã post hết mã source của server. Chúng ta ở bài này sẽ sử dụng form send.html và gửi thông tin đến server thông qua form này. Nhưng đầu tiên chúng ta cần tạo ra một nhân vật của mình, tôi cũng sử dụng class robot để tạo nhân vật, nhưng chúng ta sẽ trực tiếp điều khiển nó thông qua phím chứ không phải là mã lệnh nữa. class canvas của chúng ta sẽ thành như thế này: mog.java
C:\Users\thanhliem\Documents\NetBeansProjects\mog\src\mog.java
class canvas extends Canvas{
textfield tf;
Vector rb=new Vector();
Font f=Font.getFont(0,0,8);
int w,h,k=0,fh;
String command="";
//tạo ra một biến robot để làm nhân vật của ta, tại vị trí (0,0)
robot me=new robot(0,0);
public canvas(){
setFullScreenMode(true);
w=getWidth();
h=getHeight();
fh=f.getHeight();
tf=new textfield("command",0,0,w);
}
public void paint(Graphics g){
g.setFont(f);
g.setColor(0);
g.fillRect(0,0,w,h);
tf.paint(g,k,true);
g.setColor(0xf0f0);
g.setClip(0,0,w,h);
g.drawString(command,0,fh*2,Graphics.TOP|Graphics.LEFT);
if(rb!=null)
for(int i=0;i<rb.size();i++)
((robot)rb.elementAt(i)).paint(g);
//vẽ nhân vật chúng ta lên canvas qua hàm paint của class robot
me.paint(g);
k=0;
repaint();
}
public void keyPressed(int k){
this.k=k;
if(k==-5){
command=tf.getString();
String[] acommand=tach(command,".");
Vector trb=new Vector();
for(int i=0;i<acommand.length;i++){
    String[] info=tach(acommand[i],",");
    robot nrb=new robot(w/2,h/2);
    for(int j=0;j<rb.size();j++){
    if(info[0].equals(((robot)rb.elementAt(j)).say)){nrb=(robot)rb.elementAt(j);
    System.out.println("dectect");}}
    nrb.getcommand(info);
trb.addElement((robot)nrb);}
rb=trb;}
//ta thêm đoạn này để điều khiển trực tiếp biến me (robot) thông qua nhấn phím
if(k==-4){me.nx=me.x+5;}
if(k==-3){me.nx=me.x-5;}
if(k==-2){me.ny=me.y+5;}
if(k==-1){me.ny=me.y-5;}
}
public void keyReleased(int k){this.k=0;}

public String[] tach(String s,String c){
Vector v=new Vector();
if(!s.endsWith(c)){s+=c;}
int st=0,np=s.indexOf(c,st);
while(np!=-1){
v.addElement((String)s.substring(st,np));
st=np+c.length();
np=s.indexOf(c,st);}
String[] rt=new String[v.size()];
v.copyInto((String[])rt);
for(int i=0;i<rt.length;i++){System.out.println(rt[i]+rt[i].length());}
return rt;}
}
Xong bây giờ thì chỉnh sửa một chút ở file mog.java để gửi thông tin lên server thông qua hàm send mà ta đã biết. địa chỉ vẫn là địa chỉ cũ, còn thông số thì có thay khác theo form send.html chúng ta đã biết (nghiên cứu html nhé). mog.java
C:\Users\thanhliem\Documents\NetBeansProjects\mog\src\mog.java
public class mog extends MIDlet implements Runnable{
    //tạo biến nhận giá trị của user và pass
    String user,pass;
    //id là giá trị của trả về ứng với mỗi user có một số id riêng biệt
    int id,mode=0;
    canvas cv=new canvas();
public void startApp(){
    //chúng ta cho hiển thị form login là một class mở rộng từ class Form
Display.getDisplay(this).setCurrent(new login(this));}
public void destroyApp(boolean t){}
public void pauseApp(){}
//hàm cv này dùng để nhận giá trị từ login.java sau khi đã thực hiện nhấn lệnh ok 
public void cv(String user,String pass){
    this.user=user;
    this.pass=pass;
    //hàm send trả về dữ liệu lấy từ server là id nhưng có kèm theo mã BOM của utf-8
   String st= send("http://holyeyed.99k.org/game/server.php","submit=2&user="+user+"&pass="+pass);
   //nếu như trả về dữ liệu khác null thì cho hiện canvas.
   id=Integer.parseInt(st.substring(3));
   if(id>0){
Display.getDisplay(this).setCurrent(cv);
//chuyển mode sang 3, và cho khởi động thread
mode=3;
   new Thread(this).start();}}
//khi thread khởi động nó sẽ không dừng lại
public void run(){
    while(true){
        try{
            //cho ngừng một khoảng thời gian (500millis) sau mỗi lần gửi thông tin lên server
            Thread.sleep(500);
switch(mode){
    case 1:
break;
    case 2:
break;
    case 3:
        //thông qua hàm send gửi các thông tin gồm: id, mess, x, y lên server.
        send("http://holyeyed.99k.org/game/server.php","submit=3&id="+id+"&mess=holyeyed&x="+cv.me.x+"&y="+cv.me.y);
break;}}catch(Exception e){}}}
//hàm send dùng thực hiện kết nối, nhận 2 tham số là địa chỉ web và các thông số gửi đi
String send(String add,String para){
try{
HttpConnection hc=(HttpConnection)Connector.open(add);
//set method giống với form trên server
hc.setRequestMethod(HttpConnection.POST);
//khi method là POST thì phải có content-type
hc.setRequestProperty("Content-Type", 
           "application/x-www-form-urlencoded");
//phần sau là đọc và trả về chuỗi
OutputStream os=hc.openOutputStream();
os.write(para.getBytes());
InputStream is=hc.openDataInputStream();
int c;
StringBuffer sb=new StringBuffer();
while((c=is.read())!=-1){sb.append((char)c);}
is.close();
os.close();
hc.close();
System.out.println(sb.toString());
return sb.toString();
}catch(Exception e){}
return null;}}
Vậy thôi, dù bạn có chạy chương trình thì chỉ có thể thấy là điều khiển được nhân vật hình vuông thôi, chứ không biết nó có gửi thông tin đúng lên server hay không. Nhưng đừng lo, theo lý thuyết là vậy và bạn sẽ biết được là nó có thật sự gửi được hay không thì chờ bài sau nhé. http://holyeyed.99k.org/function/up/mog-84566.zip
http://holyeyed.99k.org/function/up/mog-57614.jar

một form login đơn giản

có vẻ như bài này không có liên quan gì đến bài trước cả, và cũng đừng có nghĩ là tôi đang chuyển qua nói về lập trình web. Chỉ là có những thứ cần thiết cho quá trình lập trình mà chúng ta cần biết. Chúng ta sẽ có một trang như thế này, code của nó tôi sẽ post cuối bài: http://holyeyed.99k.org/game/reg.html http://holyeyed.99k.org/game/login.html http://holyeyed.99k.org/game/get.html http://holyeyed.99k.org/game/send.html trong một lúc chúng ta sẽ phải gửi dữ liệu từ ứng dụng lên server đồng thời cũng nhận từ server về thông tin về những người chơi khác. Chúng ta sẽ tạo một form đăng nhập đơn giản, còn phần đăng kí các bạn tự viết nhé. bây giờ chúng ta hãy chú ý tới midlet của chúng ta. trong một lúc chúng ta sẽ phải gửi dữ liệu từ ứng dụng lên server đồng thời cũng nhận từ server về thông tin về những người chơi khác. Chúng ta sẽ tạo một form đăng nhập đơn giản, còn phần đăng kí các bạn tự viết nhé. File mog.java của chúng ta sẽ như thế này: mog.java
C:\Users\thanhliem\Documents\NetBeansProjects\mog\src\mog.java
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
import java.util.*;
import java.io.*;
import javax.microedition.io.*;

public class mog extends MIDlet implements Runnable{
    //tạo biến nhận giá trị của user và pass
    String user,pass;
    //id là giá trị của trả về ứng với mỗi user có một số id riêng biệt
    int id,mode=0;
public void startApp(){
    //chúng ta cho hiển thị form login là một class mở rộng từ class Form
Display.getDisplay(this).setCurrent(new login(this));}
public void destroyApp(boolean t){}
public void pauseApp(){}
//hàm cv này dùng để nhận giá trị từ login.java sau khi đã thực hiện nhấn lệnh ok 
public void cv(String user,String pass){
    this.user=user;
    this.pass=pass;
    //hàm send trả về dữ liệu lấy từ server là id nhưng có kèm theo mã BOM của utf-8
   String st= send("http://holyeyed.99k.org/game/server.php","submit=2&user="+user+"&pass="+pass);
   if(st!=null)
Display.getDisplay(this).setCurrent(new canvas());}
public void run(){
switch(mode){
    case 1:
break;
    case 2:
break;}}
//hàm send dùng thực hiện kết nối, nhận 2 tham số là địa chỉ web và các thông số gửi đi
String send(String add,String para){
try{
HttpConnection hc=(HttpConnection)Connector.open(add);
//set method giống với form trên server
hc.setRequestMethod(HttpConnection.POST);
//khi method là POST thì phải có content-type
hc.setRequestProperty("Content-Type", 
           "application/x-www-form-urlencoded");
//phần sau là đọc và trả về chuỗi
OutputStream os=hc.openOutputStream();
os.write(para.getBytes());
InputStream is=hc.openDataInputStream();
int c;
StringBuffer sb=new StringBuffer();
while((c=is.read())!=-1){sb.append((char)c);}
is.close();
os.close();
hc.close();
System.out.println(sb.toString());
return sb.toString();
}catch(Exception e){}
return null;}}
Đó là trong mog.java, còn một file nữa đó là login.java, đây là class mở rộng từ Form và được tạo dựng sẵn có các field và command theo ý mình, khi sử dụng chỉ cần cho khởi tạo và hiện thị, như các bạn thấy ở trong class mog ở trên: login.java
C:\Users\thanhliem\Documents\NetBeansProjects\mog\src\login.java
import javax.microedition.lcdui.*;
//class login là một Form được tạo dựng sẵn
public class login extends Form implements CommandListener {
    //nó chứa 2 textfield và một command
    TextField user=new TextField("use","",15,0);
    TextField pass=new TextField("pass","",15,TextField.PASSWORD);
    Command ok=new Command("ok",Command.OK,2);
    mog m;
public login(mog m){
    //do mở rộng từ Form nên khi khởi tạo phải cho nó tiêu đề qua hàm super
    super("đăng nhập");
this.m=m;
//thêm và các field và command
append(user);
append(pass);
addCommand(ok);
setCommandListener(this);}    
public void commandAction(Command c,Displayable d){
    //khi nhấn phím ok thì nó sẽ chạy hàm cv trong class mog.java và nhận các giá trị từ các field
if(c==ok){m.cv(user.getString(),pass.getString());}}
}

• Do càng về sau bài càng phức tạp nên tôi sẽ nói ít thôi, hãy đọc là chính và rồi sẽ hiểu. • Như trên là chúng ta đã tạo ra một ứng dụng login đơn giản với việc đăng kí trên server rồi. http://holyeyed.99k.org/function/up/mog-74430.zip
http://holyeyed.99k.org/function/up/mog-38525.jar
source html