科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件在J2ME中实现基于UDP协议通讯程序

在J2ME中实现基于UDP协议通讯程序

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

在GCF中提供了DatagramConnection和Datagram两个接口,借助他们我们可以在J2ME中基于UDP协议开发联网应用程序.

作者:mingjava 来源:J2ME开发网 2007年12月28日

关键字:

  • 评论
  • 分享微博
  • 分享邮件
服务器端的目的就是启动后监听指定的端口,当客户端连接过来后接受数据并记录下客户端的地址,以便服务器端向客户端发送数据。

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()
  {
  }

}

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章