برنامج شات دردشة J2ME

استعرض الموضوع السابق استعرض الموضوع التالي اذهب الى الأسفل

برنامج شات دردشة J2ME

مُساهمة من طرف أيمن الإبراهيم في الجمعة سبتمبر 20, 2013 9:29 pm

برنامج شات دردشة عن طريق البلوتث .....يحتاج البرنامج الى قسمين:




قسم الخادم Server

قسم العميل Client

قم بفتح مشروع جديد > JAVA ME > ثم > MOBILE APPLICATION > ثم > اسم مشروع كما تريد   ثما انهاء

قم باضافة MIDLET وقم بتسميته Client

اكتب الكود التالي في  Client

الرمز:

import java.io.*;
import javax.bluetooth.*;
import javax.microedition.io.Connector;
import javax.microedition.io.StreamConnection;
import javax.microedition.lcdui.*;
import javax.microedition.midlet.*;

public class Client extends MIDlet implements CommandListener,DiscoveryListener,Runnable {


    private Display display;
    public List devicelist;
    private final List deviceList;
    public DiscoveryAgent agent;
    public String deviceName,address;
    private Command Refresh,connect,end,Exit;
    private String s,url;
    private Alert dialog1;
    private StreamConnection conn;
    private Server b;
    private DataOutputStream dos;


    private String[][] array[][] ;

    Thread t;


    public Form ChatForm = new Form("chat window");
    private Command send,exit;
    private TextField textfield;
   private String sendmsg;


    public Client()

    {


        deviceList = new List("List of Devices",List.IMPLICIT);


        Exit= new Command("Exit",Command.EXIT, 0);

        connect = new Command("connect",Command.SCREEN, 1);

        Refresh = new Command("Refresh",Command.SCREEN, 1);

        end = new Command("End",Command.EXIT, 1);

        deviceList.addCommand(Exit);

        deviceList.addCommand(connect);

        deviceList.addCommand(Refresh);


        deviceList.setCommandListener(this);


        Display.getDisplay(this).setCurrent(deviceList);


    


        t = new Thread(this);


    }


    public void startApp() throws MIDletStateChangeException {


        try {


            b=new Server(this);


            getChatForm();


            deviceList.deleteAll();


            LocalDevice local = LocalDevice.getLocalDevice();


            address = local.getBluetoothAddress();


            agent = local.getDiscoveryAgent();


           


        } catch (BluetoothStateException ex) {


            throw new MIDletStateChangeException("Unable to retrieve local Bluetooth device.");


        }


     


            }


  





    public void pauseApp() {





    }


    public void clear() throws IOException


    {


         b.destroy();


    }





    public void destroyApp(boolean unconditional) throws MIDletStateChangeException{


    


    notifyDestroyed();


    }





    public void commandAction(Command c, Displayable d) {


       if(c==Exit)


        {


         try {


                dos.writeUTF("eof");


             } catch (IOException ex) {


                  ex.printStackTrace();


                }


                notifyDestroyed();


         }





       if(c==Refresh){


            try {


                try {


                agent.startInquiry(DiscoveryAgent.GIAC, this);


                dialog1 = new Alert("Searching","Please Wait ,Searching devices",null,AlertType.INFO);


                dialog1.setTimeout(1000);


                Display.getDisplay(this).setCurrent(dialog1);


            } catch (BluetoothStateException e) {


                    throw new MIDletStateChangeException("Unable to start the inquiry");


}


            } catch (MIDletStateChangeException ex) {


                ex.printStackTrace();


            }


       }





       if(c==connect){


           Display.getDisplay(this).setCurrent(ChatForm);


        


           s= deviceList.getString(deviceList.getSelectedIndex());


           url =  "btspp://"+ s + ":" + "1" ;


           System.out.println(url);


           t.start();


       }


       if(c==send){


           sendmsg =  textfield.getString() ;


           textfield.setString("");


           this.ChatForm.append("\n"+"انا: "+sendmsg);


       try {


             dos.writeUTF(address+sendmsg);


           } catch (IOException ex) {


                ex.printStackTrace();


              }           


       }


 }





    public void deviceDiscovered(RemoteDevice btDevice, DeviceClass cod) {


         try {


            String deviceaddress = btDevice.getBluetoothAddress();


            String address = btDevice.getFriendlyName(true);


            deviceList.insert(0, deviceaddress , null);


        } catch (IOException ex) {


            ex.printStackTrace();


        }


    }





    public void servicesDiscovered(int transID, ServiceRecord[] servRecord) {


      


    }





    public void serviceSearchCompleted(int transID, int respCode) {


      


    }





    public void inquiryCompleted(int discType) {


        Alert dialog = null;


        if (discType != DiscoveryListener.INQUIRY_COMPLETED) {


            dialog = new Alert("Bluetooth Error","The inquiry failed to complete normally",null, AlertType.ERROR);


          }


         else {


              dialog = new Alert("Inquiry Completed","The inquiry completed normally", null,AlertType.INFO);


              }


              dialog.setTimeout(500);


              Display.getDisplay(this).setCurrent(dialog);


                               


    }





    public void run() {


        try {


               conn = (StreamConnection) Connector.open(url);       


               dos = conn.openDataOutputStream();    


            } catch (Exception ex) {


               System.out.println("here");


                ex.printStackTrace();


           }


        }


     public void setText(String s)


     {


        this.ChatForm.append("\n"+"Friend: "+s);


      }





    public void getChatForm()


    {


        textfield = new TextField("نص الرسالة  ","",50,TextField.ANY);


         exit = new Command ("خروج", Command.EXIT,1);


         send = new Command ("ارسال",Command.OK,1);


         ChatForm.append(textfield);


         ChatForm.append("---------------------");


         ChatForm.addCommand(exit);


         ChatForm.addCommand(send);


         ChatForm.setCommandListener(this);


  }


    void setUp(String url1)


    {


       try{


        url =  "btspp://"+ url1 + ":" + "1" ;


        t.start();


       }catch(Exception e){


       e.printStackTrace();


       }


    }


}

-----------------

قسم الخادم  Server


قم باضافة MIDLET  وقم بتسميته Server وقم بكتابة الكود التالي :
الرمز:



import java.io.*;


import javax.bluetooth.*;


import javax.microedition.io.*;


import javax.microedition.lcdui.Display;





/**


 * @author Vaibhav


 */


public class Server implements Runnable   {





    public DataInputStream dis;


    private StreamConnection con;


    public boolean listening = false;


    private Client Client;


    StreamConnectionNotifier notifier = null ;


    String msg,msg1,msg2;


    int count;


    public Server(Client Client)


    {


      this.Client = Client;


      count=0;


       try{


         Thread t = new Thread(this);


         t.start();


        }


       catch(Exception e)


        {}


   }


   public void run() {


          try {


    // retrieve the local Bluetooth device object


    LocalDevice localDevice = LocalDevice.getLocalDevice();


    // retrieve the Bluetooth address of the local device


    String address = localDevice.getBluetoothAddress();


    // retrieve the name of the local Bluetooth device


    String deviceName = localDevice.getFriendlyName();


    System.out.println(address+"   "+deviceName);


    DiscoveryAgent agent =localDevice.getDiscoveryAgent();


    localDevice.setDiscoverable(DiscoveryAgent.GIAC);


     UUID uuid = new UUID(0x0009);


    String url = "btspp://localhost:" + uuid + ";name=" + deviceName + ";" +


                  "authenticate=true"  ;


    notifier = (StreamConnectionNotifier) Connector.open(url);


    con =notifier.acceptAndOpen();


    dis =con.openDataInputStream();


    listening = true;


    setChat();


    }


    catch (Exception ex) {


      ex.printStackTrace();


    }


 }


   public  void  destroy() throws IOException


    {


     notifier.close();


    listening = false;


    }


   public void  setChat()


    {


     try{


         while(listening)


          {


            msg = dis.readUTF();


            msg1=msg.substring(0,12);


            msg2=msg.substring(12);


            if(count==0)


            {


            Client.setUp(msg1);


            }


            count=1;


             try{


                 if(!msg2.equals("eof")){


                    Display.getDisplay(Client).setCurrent(Client.ChatForm);


                    System.out.println(msg2);


                    Client.setText(msg2);


                   }


                    else


                     listening=false;


             }


              catch(Exception e)


                        {


                            e.printStackTrace();


                        }


              }


       }


            catch(Exception ex)


                      {


                          ex.printStackTrace();


                      }


      


    }


}

---------
قم بتشغيل البرنامح

---------
شرح اكوا فئة العميل Client


عند تشغيل العميل المنشئ ، فإنه initialises هذا البند للعرض .

StartApp ( ) يخلق في الوقت نفسه مثيل فئة خادم و يدعو المنشئ الخاص به .

كما تدعو getChatForm ( ) الذي حدد عرض chatform كما ترون في رمز الدالة getChatForm .
بقية الأمر هو نفسه كما كان في اكتشاف الجهاز.

الآن عند الضغط على زر التحديث، ثم البحث عن جهاز الهاتف النقال من خلال bletooth startInquiry (0 كما هو موضح في البرنامج التعليمي السابق .بعد أن نكون قد حصلت على قائمة الأجهزة ومن ثم نضغط الاتصال على العنوان المحدد ثم commandaction من الاتصال يأتي دور فإنه يتحقق للجهاز المحدد ، ويحصل على عنوان IP الخاص به ويخلق URL وضوحا في العبارات التالية .

الرمز:



 S = deviceList.getString ( deviceList.getSelectedIndex ()) ؛


           URL = " btspp :/ / " + S + " : " + " 1 " ؛



ثم بدأ الموضوع .

و excecuted وظيفة التشغيل ، التي كون = ( StreamConnection ) Connector.open ( URL) ؛
               دوس = conn.openDataOutputStream ()؛
أوامر بإنشاء اتصال تيار إلى URL التي تم إنشاؤها في الأمر الاتصال.

ثم يتم فتح مجرى dataoutput لإرسال البيانات .الآن عندما يتم إعطاء الأمر إرسال ،sendmsg = textfield.getString ()؛ يحصل السلسلة التي تم إدخالها.

هذا إلحاق الرسالة المرسلة إلى شاشة المرسل.
this.ChatForm.append ("\ N" + "لي: " + sendmsg ) ؛

ثم يرسل هذا الأمر البيانات وعنوان المتنقلة من خلال إرسال outputstreamconnection .
dos.writeUTF (عنوان + sendmsg ) ؛
هذا ويختتم جانب العميل الترميز.

-------------------
شرح اكواد فئة الخادم Server
ا
الآن في فئة خادم ، حالما يتم إنشاء مثيل من قبل العميل ، ويدير المنشئ الخاص به .
this.Client = عميل ؛الأمر أعلاه hepls الطبقة لتحديد فئة الأصل.
ثم يبدأ في الموضوع .
يتم تنفيذ وظيفة تعمل على الخادم .

هذا البيان باسترداد كائن الجهاز بلوتوث المحلية
    LocalDevice localDevice = LocalDevice.getLocalDevice ( )
؛
    بعد ذلك استرداد عنوان البلوتوث للجهاز المحلية
    عنوان السلسلة = localDevice.getBluetoothAddress ()؛

    هذا استرداد اسم جهاز بلوتوث المحلية
    سلسلة DEVICENAME = localDevice.getFriendlyName ()؛

    وهذا يخلق discoveryagent .
    وكيل DiscoveryAgent = localDevice.getDiscoveryAgent ()؛


هذا يضع الجهاز كما discoverable.Check عن الخيارات الأخرى المتاحة لاخفاء الجهاز.
    localDevice.setDiscoverable ( DiscoveryAgent.GIAC ) ؛
     UUID UUID = جديد UUID ( 0x0009 ) ؛
    URL = سلسلة " btspp :/ / مؤسسة الكوثر : " + + UUID " ؛ اسم = " + DEVICENAME + "،" +
                  " مصادقة = صحيح " ؛

2 أعلاه البيانات تعد URL اتصال .
هذا البيان يخلق اتصال المخطر .
المخطر = ( StreamConnectionNotifier ) Connector.open ( URL) ؛
وكان جوهر الترميز لدينا الآن أنه لا يلزم الحصول على موافقة . هنا هو قطعة من التعليمات البرمجية التي تقرر ذلك.
يخدع = notifier.acceptAndOpen ()؛
فإنه تلقائيا يقبل اتصال وارد ويفتح تيار .
DIS = con.openDataInputStream ()؛
ثم يتم تنفيذ وظيفة setchat .

MSG = dis.readUTF ()؛
            msg1 = msg.substring ( 0،12 ) ؛
            msg2 = msg.substring (12)؛
ويتم ذلك فوق الترميز للتفريق العنوان و النص بحيث يمكن استخدام هذا العنوان للاتصال مرة أخرى إلى المرسل ، و يتم عرض البيانات على chatform (ولكن يستخدم setText وظيفة من العميل لهذا الغرض . )


ولكن عندما العد هو 0 ، فإنه يستدعي وظيفة الإعداد. ويتم ذلك عندما المتلقي يستقبل البيانات للمرة الأولى . ويتم ذلك بحيث يمكن الاتصال مرة أخرى إلى المرسل للرد . ولكن عندما يرسل المتلقي العودة 2nd الوقت ، العد increses إلى أكثر من 0 و يتخطى هذا الجزء .
وأخيرا وظيفة الإعداد من العميل يعد مجرد URL اتصال لخادم للاتصال مرة أخرى .

وهكذا انهينا شرح برنامج واعتذر عن عدم تفصيل في شرح

أيمن الإبراهيم
........
........

تاريخ التسجيل : 19/03/2013
المساهمات : 251
النقاط : 397
التقيم : 0
الدولة : سوريا
الجنس : ذكر

الرجوع الى أعلى الصفحة اذهب الى الأسفل

رد: برنامج شات دردشة J2ME

مُساهمة من طرف Solutions1 في الخميس نوفمبر 21, 2013 9:02 pm

مافى سورس كود ؟

Solutions1
..
..

تاريخ التسجيل : 31/08/2013
المساهمات : 22
النقاط : 30
التقيم : 0
الدولة : السعودية
الجنس : انثى

الرجوع الى أعلى الصفحة اذهب الى الأسفل

استعرض الموضوع السابق استعرض الموضوع التالي الرجوع الى أعلى الصفحة


 
صلاحيات هذا المنتدى:
لاتستطيع الرد على المواضيع في هذا المنتدى