亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? socket_j2me.txt

?? j2me socket code
?? TXT
字號:
 | 文章 | 論壇 | 設(shè)備列表 | 源碼下載 |   
 
 
    設(shè)為首頁 
 聯(lián)系站長 
 加入收藏 
 
 
 
| 
 文章首頁 

 
在J2ME中基于UDP協(xié)議編程  
[ 作者:mingjava    轉(zhuǎn)貼自:本站原創(chuàng)    點擊數(shù):236    更新時間:2004-11-26    文章錄入:mingjava ] 
 
    在GCF中提供了DatagramConnection和Datagram兩個接口,借助他們我們可以在J2ME中基于UDP協(xié)議開發(fā)聯(lián)網(wǎng)應(yīng)用程序,在MIDP2.0中,添加了UDPDatagramConnection這個接口。他擴展了DatagramConnection并添加了兩個方法getLocalAddress()和getLocalPort()。我們知道UDP服務(wù)是不可靠的,如果你希望開發(fā)更可靠的聯(lián)網(wǎng)應(yīng)用的話可以采用SocketConnection,因為TCP服務(wù)是面向連接且可靠的。我們還必須清楚地一點是以上所說的各種連接方式都不是MIDP規(guī)范中規(guī)定必須實現(xiàn)的。因此在使用之前請參考特定設(shè)備的開發(fā)文檔。MIDP中只有Http連接是必須支持的。

    同樣,我們要獲得DatagramConnection的話,必須通過Connector的open方法,其中的URL應(yīng)該滿足如下的形式。

datagram://localhost:5555 這樣的話表示建立了一個客戶端模式的連接。在指定ip:localhost和指定端口:5555 
datagram://:5555  這樣建立的是一個服務(wù)器端模式的連接,在本地的5555端口。
建立連接后,我們可以通過DatagramConnection的newDatagram()方法構(gòu)造一個Datagram,然后調(diào)用DatagramConnection的send()方法。這樣數(shù)據(jù)報將會發(fā)送到指定的接受方。例如你可以構(gòu)建這個一個負責(zé)發(fā)送數(shù)據(jù)的Sender類。

package com.siemens.datagramtest;

import javax.microedition.io.Datagram;
import javax.microedition.io.DatagramConnection;

public class Sender extends Thread
{

    private DatagramConnection dc;

    private String address;

    private String message;

    public Sender(DatagramConnection dc)
    {
        this.dc = dc;
        start();
    }

    public synchronized void send(String addr, String msg)
    {
        address = addr;
        message = msg;
        notify();
    }

    public synchronized void run()
    {

        while (true)
        {

            // If no client to deal, wait until one connects
            if (message == null)
            {
                try
                {
                    wait();
                } catch (InterruptedException e)
                {
                }
            }

            try
            {
                byte[] bytes = message.getBytes();
                Datagram dg = null;
                // Are we a sender thread for the client ? If so then there's
                // no address parameter
                if (address == null)
                {
                    dg = dc.newDatagram(bytes, bytes.length);
                } else
                {
                    dg = dc.newDatagram(bytes, bytes.length, address);
                    System.out.println(address);
                }
                dc.send(dg);
            } catch (Exception ioe)
            {
                ioe.printStackTrace();
            }

            // Completed client handling, return handler to pool and
            // mark for wait
            message = null;
        }
    }

}
注意聯(lián)網(wǎng)的時候我們應(yīng)該在另外一個線程中而不是在主線程中。

     服務(wù)器端的目的就是啟動后監(jiān)聽指定的端口,當(dāng)客戶端連接過來后接受數(shù)據(jù)并記錄下客戶端的地址,以便服務(wù)器端向客戶端發(fā)送數(shù)據(jù)。
package com.siemens.datagramtest;

import java.io.IOException;

import javax.microedition.io.Connector;
import javax.microedition.io.Datagram;
import javax.microedition.io.DatagramConnection;
import javax.microedition.io.UDPDatagramConnection;
import javax.microedition.lcdui.Alert;
import javax.microedition.lcdui.AlertType;
import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.Form;
import javax.microedition.lcdui.StringItem;
import javax.microedition.lcdui.TextField;

public class Server implements Runnable, CommandListener
{

    private DatagramMIDlet parent;

    private Display display;

    private Form f;

    private StringItem si;

    private TextField tf;

    private Command sendCommand = new Command("Send", Command.ITEM, 1);

    Sender sender;

    private String address;

    public Server(DatagramMIDlet m)
    {
        parent = m;
        display = Display.getDisplay(parent);
        f = new Form("Datagram Server");
        si = new StringItem("Status:", " ");
        tf = new TextField("Send:", "", 30, TextField.ANY);
        f.append(si);
        f.append(tf);
        f.addCommand(sendCommand);
        f.setCommandListener(this);
        display.setCurrent(f);
    }

    public void start()
    {

        Thread t = new Thread(this);
        t.start();
    }

    public void run()
    {
        try
        {

            si.setText("Waiting for connection");
            DatagramConnection dc =(DatagramConnection)Connector.open("datagram://:5555");
           

            sender = new Sender(dc);

            while (true)
            {
                Datagram dg = dc.newDatagram(100);
                dc.receive(dg);
                address = dg.getAddress();
                si.setText("Message received - "
                        + new String(dg.getData(), 0, dg.getLength()));
              
            }

        } catch (IOException ioe)
        {
            Alert a = new Alert("Server", "Port 5000 is already taken.", null,
                    AlertType.ERROR);
            a.setTimeout(Alert.FOREVER);
            a.setCommandListener(this);
            display.setCurrent(a);
        } catch (Exception e)
        {
            e.printStackTrace();
        }
    }

    public void commandAction(Command c, Displayable s)
    {
        if (c == sendCommand && !parent.isPaused())
        {
            if (address == null)
            {
                si.setText("No destination address");
            } else
            {
                sender.send(address, tf.getString());
            }
        }
        if (c == Alert.DISMISS_COMMAND)
        {
            parent.destroyApp(true);
            parent.notifyDestroyed();
        }
    }

    public void stop()
    {
    }

}

客戶端代碼則是建立連接后向服務(wù)器端發(fā)送數(shù)據(jù),并等待接受服務(wù)器返回的數(shù)據(jù)。
package com.siemens.datagramtest;

import java.io.IOException;

import javax.microedition.io.ConnectionNotFoundException;
import javax.microedition.io.Connector;
import javax.microedition.io.Datagram;
import javax.microedition.io.DatagramConnection;
import javax.microedition.lcdui.Alert;
import javax.microedition.lcdui.AlertType;
import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.Form;
import javax.microedition.lcdui.StringItem;
import javax.microedition.lcdui.TextField;

public class Client implements Runnable, CommandListener
{

    private DatagramMIDlet parent;

    private Display display;

    private Form f;

    private StringItem si;

    private TextField tf;

    private Command sendCommand = new Command("Send", Command.ITEM, 1);

    Sender sender;

    public Client(DatagramMIDlet m)
    {
        parent = m;
        display = Display.getDisplay(parent);
        f = new Form("Datagram Client");
        si = new StringItem("Status:", " ");
        tf = new TextField("Send:", "", 30, TextField.ANY);
        f.append(si);
        f.append(tf);
        f.addCommand(sendCommand);
        f.setCommandListener(this);
        display.setCurrent(f);

    }

    public void start()
    {
        Thread t = new Thread(this);
        t.start();
    }

    public void run()
    {
        try
        {

            DatagramConnection dc = (DatagramConnection) Connector
                    .open("datagram://localhost:5555");
            

            si.setText("Connected to server");

            sender = new Sender(dc);

            while (true)
            {
                Datagram dg = dc.newDatagram(100);
                dc.receive(dg);
                // Have we actually received something or is this just a timeout
                // ?
                if (dg.getLength() > 0)
                {
                    si.setText("Message received - "
                            + new String(dg.getData(), 0, dg.getLength()));
                }
            }

        } catch (ConnectionNotFoundException cnfe)
        {
            Alert a = new Alert("Client", "Please run Server MIDlet first",
                    null, AlertType.ERROR);
            a.setTimeout(Alert.FOREVER);
            display.setCurrent(a);
        } catch (IOException ioe)
        {
            ioe.printStackTrace();
        }
    }

    public void commandAction(Command c, Displayable s)
    {
        if (c == sendCommand && !parent.isPaused())
        {
            sender.send(null, tf.getString());
        }
    }

    public void stop()
    {
    }

}
本文的代碼取自WTK demo中的例子,您可以參考demo中的源代碼!下面給出MIDlet的代碼
package com.siemens.datagramtest;

import javax.microedition.lcdui.Choice;
import javax.microedition.lcdui.ChoiceGroup;
import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.Form;
import javax.microedition.midlet.MIDlet;

public class DatagramMIDlet extends MIDlet implements CommandListener
{

    private static final String SERVER = "Server";

    private static final String CLIENT = "Client";

    private static final String[] names = { SERVER, CLIENT };

    private static Display display;

    private Form f;

    ChoiceGroup cg;

    private boolean isPaused;

    private Command exitCommand = new Command("Exit", Command.EXIT, 1);

    private Command startCommand = new Command("Start", Command.ITEM, 1);

    public DatagramMIDlet()
    {
        display = Display.getDisplay(this);
        f = new Form("Datagram Demo");
        cg = new ChoiceGroup("Please select peer", Choice.EXCLUSIVE, names,
                null);
        f.append(cg);

        f.addCommand(exitCommand);
        f.addCommand(startCommand);
        f.setCommandListener(this);

        display.setCurrent(f);
    }

    public static Display getDisplay()
    {
        return display;
    }

    public boolean isPaused()
    {
        return isPaused;
    }

    public void startApp()
    {
        isPaused = false;
    }

    public void pauseApp()
    {
        isPaused = true;
    }

    public void destroyApp(boolean unconditional)
    {
    }

    public void commandAction(Command c, Displayable s)
    {
        if (c == exitCommand)
        {
            destroyApp(true);
            notifyDestroyed();
        } else if (c == startCommand)
        {
            String name = cg.getString(cg.getSelectedIndex());
            if (name.equals(SERVER))
            {
                Server server = new Server(this);
                server.start();
            } else
            {
                Client client = new Client(this);
                client.start();
            }
        }
    }

}
 

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
在线观看不卡一区| 免费看日韩精品| 色综合天天综合网国产成人综合天| 国产欧美视频在线观看| 国产精品影视在线| 欧美激情在线一区二区三区| 成人av手机在线观看| 亚洲视频在线一区| 884aa四虎影成人精品一区| 久久成人免费网| 国产精品久久久久久一区二区三区 | 国产suv精品一区二区6| 国产精品热久久久久夜色精品三区 | 欧美日韩和欧美的一区二区| 免费久久99精品国产| 国产午夜精品一区二区| 91在线视频网址| 亚洲不卡av一区二区三区| 正在播放一区二区| 粉嫩av亚洲一区二区图片| 一区二区三区精品久久久| 日韩欧美国产小视频| 成人av网址在线观看| 午夜激情久久久| 国产欧美一区二区三区在线老狼| 日本高清不卡视频| 久久se精品一区二区| 亚洲欧美aⅴ...| 精品久久国产字幕高潮| 色婷婷久久久亚洲一区二区三区| 免费一区二区视频| 亚洲女爱视频在线| 精品第一国产综合精品aⅴ| 色综合久久久久综合体| 免费的成人av| 一区二区成人在线| 日本一二三不卡| 日韩欧美综合一区| 日本乱人伦一区| 丁香网亚洲国际| 美日韩一区二区三区| 亚洲伦理在线精品| 日本一区二区三区视频视频| 欧美一区二区视频网站| 色婷婷香蕉在线一区二区| 国产精品伊人色| 美女一区二区在线观看| 一区二区三区欧美日| 中文字幕欧美国产| 精品国产一区二区三区久久影院| 欧美日韩久久不卡| a4yy欧美一区二区三区| 国产一区二区三区黄视频 | 日韩精品亚洲专区| 一区二区成人在线观看| 中文字幕电影一区| 久久久久国产一区二区三区四区| 欧美一区二区视频在线观看2020| 欧美在线你懂得| 色综合久久中文综合久久97| av中文字幕不卡| av综合在线播放| 成人高清视频在线| 国产精品白丝jk白祙喷水网站 | 一区二区三区四区视频精品免费 | 色伊人久久综合中文字幕| 成人午夜视频福利| 国产成人在线看| 国精产品一区一区三区mba视频| 免费成人美女在线观看.| 午夜成人免费视频| 天堂av在线一区| 日韩国产欧美在线视频| 日韩av一区二区三区四区| 日韩高清不卡在线| 免费观看91视频大全| 蜜乳av一区二区| 精品一区二区精品| 韩国在线一区二区| 国产成人鲁色资源国产91色综 | 亚洲国产精品欧美一二99 | 久久99精品久久久久久久久久久久| 日韩国产欧美一区二区三区| 日韩不卡手机在线v区| 日韩成人av影视| 韩国三级在线一区| 风间由美一区二区三区在线观看 | 国产午夜精品一区二区三区嫩草| 久久精品亚洲国产奇米99| 欧美精彩视频一区二区三区| 国产精品久久久久永久免费观看 | 午夜国产精品一区| 老司机精品视频导航| 国产成人精品一区二区三区四区| 白白色亚洲国产精品| 91精彩视频在线观看| 91精品国产综合久久香蕉麻豆| 日韩欧美精品在线| 国产精品免费丝袜| 亚洲综合区在线| 免费在线观看精品| 成人一区二区三区中文字幕| 91福利社在线观看| 日韩一区二区视频| 国产精品电影一区二区| 亚洲国产中文字幕| 精品夜夜嗨av一区二区三区| 99视频一区二区| 欧美丰满高潮xxxx喷水动漫| 久久久亚洲国产美女国产盗摄 | 亚洲欧美日韩中文播放 | 亚洲女爱视频在线| 日韩av在线发布| caoporn国产精品| 日韩一区和二区| 亚洲人成亚洲人成在线观看图片| 日韩高清中文字幕一区| 不卡的电影网站| 日韩精品影音先锋| 亚洲综合一区二区| 国产精品一区二区三区乱码| 欧美网站一区二区| 国产精品欧美极品| 青青草伊人久久| 欧美伊人久久久久久久久影院| 久久久欧美精品sm网站| 亚洲a一区二区| 97se亚洲国产综合自在线观| 欧美mv和日韩mv的网站| 一区二区三区中文在线| 国产麻豆91精品| 日韩欧美一区二区在线视频| 亚洲黄色av一区| 国产成人久久精品77777最新版本| 欧美色成人综合| 国产精品乱码人人做人人爱 | 亚洲高清三级视频| av电影天堂一区二区在线观看| 日韩情涩欧美日韩视频| 亚洲综合无码一区二区| 成人h动漫精品| 久久久久久久久久久久久女国产乱 | 久久久久久久综合日本| 日韩电影在线免费观看| 在线观看一区二区视频| 中文字幕一区二区三区不卡在线| 国产一区二区三区最好精华液| 91.成人天堂一区| 午夜欧美一区二区三区在线播放| 91在线码无精品| 中文字幕电影一区| 粉嫩av一区二区三区在线播放 | 91偷拍与自偷拍精品| 欧美国产日韩亚洲一区| 国产美女主播视频一区| 精品粉嫩aⅴ一区二区三区四区| 免费在线看成人av| 欧美一区二区性放荡片| 日本sm残虐另类| 欧美一区二区三区不卡| 日本最新不卡在线| 日韩三级.com| 韩国v欧美v亚洲v日本v| 久久免费美女视频| 国产成人免费在线视频| 国产欧美日韩在线视频| 懂色中文一区二区在线播放| 欧美国产成人在线| 成人av在线电影| 亚洲人xxxx| 欧美三级资源在线| 日韩精品一区第一页| 日韩欧美高清dvd碟片| 国模套图日韩精品一区二区| 国产女人aaa级久久久级| 成人美女视频在线看| 国产精品国产精品国产专区不片| 91丝袜美女网| 亚洲国产精品一区二区www在线| 欧美美女激情18p| 久久精品国产精品青草| 久久精品亚洲一区二区三区浴池 | 亚洲国产一区在线观看| 欧美日韩国产高清一区二区| 日韩电影在线观看一区| www激情久久| 成人免费va视频| 亚洲电影第三页| 精品国产乱码91久久久久久网站| 国产成人午夜视频| 亚洲激情网站免费观看| 日韩免费观看高清完整版 | 91成人免费在线视频| 日本欧美一区二区在线观看| 久久久www免费人成精品| 99精品桃花视频在线观看| 亚洲动漫第一页| 久久精品日产第一区二区三区高清版 | 日韩片之四级片| www.亚洲激情.com|