<iframe align="top" marginwidth="0" marginheight="0" src="http://www.zealware.com/csdnblog01.html" frameborder="0" width="728" scrolling="no" height="90"></iframe>
客户端很简单,就是开一个线程处理用户的数据发送和接收,并做出相应的界面处理。
由于其简单,我就不再罗嗦,看代码:
MIDlet类:
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import javax.microedition.io.Connector;
import javax.microedition.io.StreamConnection;
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.TextField;
import javax.microedition.midlet.MIDlet;
/**
* @author 孙东风
*
**/
public class ChatMIDlet extends MIDlet implements Runnable,CommandListener{
private static final String SERVER_IP = "127.0.0.1";
private Command exit = new Command("exit",Command.EXIT,1);
private GameScreen screen;
private DataInputStream in;
private DataOutputStream out;
private StreamConnection conn;
private boolean done;
private int player_id;
public static Display display;
Form login_form = new Form("登陆界面");
TextField name_textfield = new TextField("请输入呢称 :","",10,TextField.ANY);
Command loginCommand = new Command("登陆",Command.SCREEN,1);
static String name;
public ChatMIDlet() {
super();
login_form.append(name_textfield);
login_form.addCommand(loginCommand);
login_form.setCommandListener(this);
display = Display.getDisplay(this);
}
protected void startApp(){
try {
conn = (StreamConnection) Connector.open("socket://"+SERVER_IP+":"+Server.PORT);
in = new DataInputStream(conn.openInputStream());
out = new DataOutputStream(conn.openOutputStream());
} catch (IOException e) {
closeConnection();
System.out.println("*** could not connect to server: " + e);
destroyApp(true);
}
Display.getDisplay(this).setCurrent(login_form);
}
public DataInputStream getInput(){
return in;
}
public DataOutputStream getOutput(){
return out;
}
//关闭所有资源
private void closeConnection() {
try {
if (in != null) {
in.close();
}
if (out != null) {
out.close();
}
if (conn != null) {
conn.close();
}
} catch (IOException e) {
System.out.println(e);
}
}
protected void pauseApp() {
}
protected void destroyApp(boolean bool){
System.out.println("MidpTestClient.destroyApp()");
Message msg = new Message(Message.SIGNOFF, Message.NO_VALUE,null);
try {
msg.archive(out);
} catch (IOException e) {
}
closeConnection();
Display.getDisplay(this).setCurrent(null);
}
public void handleStatus(Message msg){
GameScreen.revStr = msg.getStr();
screen.repaint();
}
public void handleError(){
Message msg = new Message(Message.SIGNOFF, Message.NO_VALUE,null);
try {
msg.archive(out);
} catch (IOException e) {
e.printStackTrace();
}
}
public void handleUnknown(Message msg){
System.out.println("received unknown message: " + msg);
}
public void run() {
Message msg;
while (!done) {
try {
msg = Message.createFromStream(in);
} catch (IOException e) {
System.out.println("cant read message from stream");
continue;
}
switch (msg.getType()) {
case Message.SERVER_STATUS:
System.out.println("Client receive SERVER_STATUS");
handleStatus(msg);
break;
case Message.ERROR:
handleError();
break;
default:
handleUnknown(msg);
break;
}
}
}
public void commandAction(Command cmd, Displayable g) {
if (cmd == exit) {
done = true;
destroyApp(true);
notifyDestroyed();
}else if(cmd == loginCommand){
if(name_textfield.getString().length() != 0){
name = name_textfield.getString();
Message msg = new Message(Message.SIGNUP,Message.NO_VALUE,name_textfield.getString());
try{
msg.archive(out);
msg = Message.createFromStream(in);
if (msg.getType() != Message.SIGNUP_ACK) {
System.out.println("*** could not sign up: " + msg);
destroyApp(true);
}
player_id = Message.player_id;
System.out.println("received sign-up ack, id = " + player_id);
System.out.println("--------------1");
screen = new GameScreen();
screen.initialize(this, player_id);
done = false;
Thread thread = new Thread(this);
thread.start();
Display.getDisplay(this).setCurrent(screen);
}catch(Exception e){
System.out.println("*** could not sign up with server: " + e);
destroyApp(true);
}
}else{
Alert alert = new Alert("警告","用户名和密码不能为空",null,AlertType.ERROR);
alert.setTimeout(Alert.FOREVER);
Display.getDisplay(this).setCurrent(alert);
}
}
}
}
GameScreen类:
import javax.microedition.lcdui.*;
public class GameScreen extends Canvas implements CommandListener{
public Form message_form = new Form("Send Message Form");
public Command sendCommand = new Command("Send",Command.OK,1);
public Command sendCommand2 = new Command("Send",Command.OK,1);
public TextField content_textfield = new TextField("Content :","",10,TextField.ANY);
public String content;
public static String revStr = "null";
public int player_id;
ChatMIDlet chatmidlet;
public GameScreen(){
message_form.append(content_textfield);
message_form.addCommand(sendCommand2);
message_form.setCommandListener(this);
this.addCommand(sendCommand);
this.setCommandListener(this);
}
public void initialize(ChatMIDlet midlet,int player_id){
this.chatmidlet = midlet;
this.player_id = player_id;
}
protected void paint(Graphics g) {
g.setColor(0x000000);
g.fillRect(0,0,getWidth(),getHeight());
g.setColor(0xffffff);
g.drawString(revStr,0,0,Graphics.LEFT|Graphics.TOP);
}
public void commandAction(Command cmd, Displayable g) {
if(cmd == sendCommand){
System.out.println("CommandListenning this");
ChatMIDlet.display.setCurrent(message_form);
}else if(cmd == sendCommand2){
content = content_textfield.getString();
Message msg = new Message(Message.CLIENT_STATUS,player_id,content);
try{
msg.archive(chatmidlet.getOutput());
}catch(Exception e){
e.printStackTrace();
System.out.println("Send Message Failed!");
}
ChatMIDlet.display.setCurrent(this);
}
}
}
后话:希望此文能为3G到来之前吹点热风,催化催化。
效果图如下:
输入呢称并传送到Server端
输入聊天内容
显示呢称和说话内容
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=775438
相关推荐
金蝶BOS开发指南金蝶BOS开发指南金蝶BOS开发指南
金蝶BOS是一个开放的集成与应用平台,是金蝶ERP解决方案、合作伙伴解决方案以及客户定制应用的技术平台。 包含类: 1、这是bos开发使用的工具类,大概一千多行代码,包括获取当前组织,用户,自定义编码规则等等...
金蝶BOS新增单据案例
金蝶BOS开发,写的比较详细,值得你一看额
金蝶 BOS开发的样例代码,客户端、中间层调研组件及使用说明
金蝶BOS开发! 需要下载的赶紧下载!请赶紧!~
金蝶BOS常见问题集锦(一).pdf 内部总结了金蝶bos开发常见的一些问题以及处理办法等,欢迎大家批评指正
金蝶BOS套打二次开发
金蝶BOS开发指南,里面包含EAS系统所有相关配置项,常用控件,客户端,服务端代码详解
金蝶bos开发问题集 主要描述 金蝶bos开发中常见的问题的解决方法
金蝶BOS的二次开发借口表整理,含BOS与非BOS的 1. 单据事物类型表 IctransactionType 2. 单据模板表 ICtemplate 3. 单据模板分录表 ICtemplateentry 4. 序时簿模板 IClisttemplate 5. 序时簿的显示字段表 ...
金蝶BOS平台介绍PPT文件
金蝶 BOS开发 工程师基础认证培训课件
EAS Bos 开发中常见的问题描述,对于从事金蝶Bos开发人员、实施人员有一定帮助
金蝶BOS数据字典,数据字典,数据字典,表查询用到的,数据字典
金蝶顾问学院网络教材_K3 BOS初级教程,ppt文件,可以做入门教材使用,
金蝶bos开发万能类 作为学习还是有参考价值的
金蝶K3 BOS单据转换流程设置。当BOS单据与工业单据关联时,目标单据体上的物料、计量单位、数量和基本单位数量字段必须有对应的源单字段,否则关联时将发生错误。
金蝶K3 BOS 实施指南 银企平台 部署指南
金蝶BOS二次开发内部教程 金蝶--K3BOS产品培训教材.doc