`

QQDemo_mobile版本一

    博客分类:
  • J2ME
阅读更多

服务端:

package com;

import javax.microedition.io.*;

import java.io.*;

import javax.microedition.io.ServerSocketConnection;
import javax.microedition.lcdui.*;
import javax.microedition.midlet.MIDlet;
import javax.microedition.midlet.MIDletStateChangeException;

public class ServerSocket extends MIDlet implements Runnable, CommandListener {
	
	private Form form;
	private StringItem stri;
	private Command exitCmd,sendCmd;
	private TextField tf;
	Sends send;
	
	public ServerSocket() {
		form = new Form("serverSocket");
		stri = new StringItem("接收信息:","");
		tf = new TextField("发送信息:","",8000,0);
		exitCmd = new Command("exit",Command.EXIT,1);
		sendCmd = new Command("send",Command.SCREEN,1);
		form.append(stri);
		form.append(tf);
		form.addCommand(exitCmd);
		form.addCommand(sendCmd);
		form.setCommandListener(this);
	}

	protected void destroyApp(boolean arg0) throws MIDletStateChangeException {

	}

	protected void pauseApp() {

	}

	protected void startApp() throws MIDletStateChangeException {
			Display.getDisplay(this).setCurrent(form);
			Thread th = new Thread(this);
			th.start();
	}

	public void run() {
		ServerSocketConnection scn = null;
		SocketConnection sn = null;
		InputStream is = null;
		OutputStream os = null;
		 try {
			scn= (ServerSocketConnection)Connector.open("socket://:6000");
			sn = (SocketConnection) scn.acceptAndOpen();
			is = sn.openInputStream();
			os = sn.openOutputStream();
			
			send = new Sends(os);
			
			
			while(true){
				StringBuffer sb = new StringBuffer();
				int count = 0;
				while((count=is.read())!='\n'&&count!=-1){
					sb.append((char)count);
				}
				this.stri.setText(sb.toString());
			}
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally{
			try {
				is.close();
				os.close();
				sn.close();
				scn.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}

	}

	public void commandAction(Command cmd, Displayable dis) {
			if(cmd==exitCmd){
				try {
					destroyApp(false);
					notifyDestroyed();
				} catch (MIDletStateChangeException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
			
			if(cmd==sendCmd){
				this.send.send(this.tf.getString());
			}
	}

}

 

客户端:

package com;

import javax.microedition.io.*;

import java.io.*;

import javax.microedition.io.ServerSocketConnection;
import javax.microedition.lcdui.*;
import javax.microedition.midlet.MIDlet;
import javax.microedition.midlet.MIDletStateChangeException;

public class ClinetSocket extends MIDlet implements Runnable, CommandListener {
 
 private Form form;
 private StringItem stri;
 private Command exitCmd,sendCmd;
 private TextField tf;
 Sends send;
 
 public ClinetSocket() {
  form = new Form("ClinetrSocket");
  stri = new StringItem("接收信息:","");
  tf = new TextField("发送信息:","",8000,0);
  exitCmd = new Command("exit",Command.EXIT,1);
  sendCmd = new Command("send",Command.SCREEN,1);
  form.append(stri);
  form.append(tf);
  form.addCommand(exitCmd);
  form.addCommand(sendCmd);
  form.setCommandListener(this);
 }

 protected void destroyApp(boolean arg0) throws MIDletStateChangeException {

 }

 protected void pauseApp() {

 }

 protected void startApp() throws MIDletStateChangeException {
   Display.getDisplay(this).setCurrent(form);
   Thread th = new Thread(this);
   th.start();
 }

 public void run() {
  SocketConnection sn = null;
  InputStream is = null;
  OutputStream os = null;
   try {
   sn = (SocketConnection)Connector.open("socket://localhost:6000");
   is = sn.openInputStream();
   os = sn.openOutputStream();
   
   send = new Sends(os);
   
   
   while(true){
    StringBuffer sb = new StringBuffer();
    int count = 0;
    while((count=is.read())!='\n'&&count!=-1){
     sb.append((char)count);
    }
    this.stri.setText(sb.toString());
   }
  } catch (IOException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }finally{
  
   try {
    is.close();
    os.close();
    sn.close();
   } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }
  }

 }

 public void commandAction(Command cmd, Displayable dis) {
   if(cmd==exitCmd){
    try {
     destroyApp(false);
     notifyDestroyed();
    } catch (MIDletStateChangeException e) {
     // TODO Auto-generated catch block
     e.printStackTrace();
    }
   }
   
   if(cmd==sendCmd){
    this.send.send(this.tf.getString());
   }
 }

}
发送处理:

package com;

import java.io.IOException;
import java.io.OutputStream;

public class Sends extends Thread {
 private OutputStream os;
 private String message;
 public  Sends(OutputStream os){
  this.os=os;
  this.start();
 }
 
 public synchronized void send(String msg){
  this.message=msg;
  notify();
 }
 
 public synchronized void run() {
  while(true){
   if(this.message==null){
    try {
     this.wait();
    } catch (InterruptedException e) {
     // TODO Auto-generated catch block
     e.printStackTrace();
    }
   }
   
   if(this.message==null){
    break;
   }
   
   try {
    os.write(this.message.getBytes());
    os.write("\r\n".getBytes());
   } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }
   
   this.message=null;
  }
 }
 

}
欢迎大家来加添新功能!!!!

分享到:
评论

相关推荐

    C#_Scanbarcode_Demo_Example

    【C#_Scanbarcode_Demo_Example】是一个C#编程示例,主要展示了如何实现条码扫描功能,并在扫描完成后自动保存相关信息。这个项目对于理解C#中的条码处理技术,以及事件驱动编程和文件操作有很好的学习价值。 在C#...

    jQueryMobile-HTML5模板

    1. **统一的触控体验**:jQuery Mobile提供了一套跨平台的触控事件处理机制,确保在各种设备上的滑动、点击等操作有统一的反馈。 2. **自动页面导航**:通过数据-URL(data-url)属性和页面容器,jQuery Mobile可以...

    jQuery mobile库包及例子

    1. **触摸优化**:jQuery Mobile 为移动设备上的手势事件(如滑动、点击、双击等)提供了内置支持,确保在触屏设备上的交互体验流畅。 2. **页面结构和导航**:通过使用特定的 HTML5 标签(如 `...

    AmazeUiDemoAll

    AmazeUI是一款基于移动优先(Mobile First)理念的前端开发框架,专为构建响应式、高性能的Web应用而设计。这个名为"AmazeUiDemoAll"的压缩包包含了一些使用AmazeUI进行实践的示例,旨在帮助学习者更好地理解和应用...

    react-mobile-qqMusic-demo:本项目为react-mobile-qqMusic的编译文件,用于react-mobile-qqMusic的演示,具体源码请前往

    React Mobile QQMusic Demo 是一个基于React Mobile框架的QQ音乐移动端应用的示例项目。这个项目主要是为了展示如何利用React Mobile库来构建一个功能完备、用户体验良好的移动音乐播放应用。React Mobile是一个专为...

    Mobile-VS2008-VS2012使用SQLite.rar

    压缩包中的"Mobiledemo"、"2012Demo"和"2010demo"是三个不同的项目实例,分别对应VS2008、VS2010和VS2012的演示。每个项目都包含了一个或多个C#源代码文件,展示了如何在这些版本的Visual Studio中集成SQLite,并...

    腾讯联运MSDK demo

    腾讯联运MSDK Demo是腾讯推出的一款用于游戏和应用联合运营的移动软件开发工具包(Mobile Service Development Kit)。这个SDK旨在帮助开发者轻松地整合腾讯的各项服务,如社交登录、支付、分享、广告等,以便在多个...

    车FunCar Kit V20 - Mobile Update

    本次我们将深入探讨"车FunCar Kit V20 - Mobile Update"这一主题,它是一个基于Unity引擎的车模型简易demo,专为移动设备优化,旨在为开发者提供一个便捷的起点,快速构建和测试车载系统或赛车游戏的原型。...

    mul demo完整集合

    mui,全称Mobile UI,是由DCloud(即海马云)开发的一款开源的移动端轻量级UI框架,特别适用于H5页面和微信小程序的开发。它以其简洁的API、丰富的组件库以及高效的性能,受到了广大开发者的好评。mui的设计理念是让...

    Symbol EDA设备条码读码Demo

    1. 这是一个针对EMDK 2.4的Mobile EDA设备条码读码Demo 2. 需要注意的是:在关闭窗体时要记得加上barcode1.EnableScanner = false;这句 代码 3. 适合于MC50、MC70、MC5590等设备 Email:baifucn@139....

    JQueryEasyUI1.4.4

    - **demo-mobile**: 示例代码,展示了如何在移动环境中使用 jQuery EasyUI,提供了实践和学习的参考。 5. **多语言支持**: - **locale**: 这个目录可能包含各种语言的本地化文件,使得应用可以根据用户的选择...

    ProCamera2D

    - Camera Window >>DEMO - Cinematics >>DEMO - Content Fitter >>DEMO - Forward Focus >>DEMO - Geometry Boundaries - Limit Distance >>DEMO - Limit Speed >>DEMO - Numeric Boundaries >>DEMO - Pan ...

    GAutomator使用说明文档1

    【GAutomator使用说明文档1】是一份详细指导如何通过Python进行Unity手游UI自动化测试的文档。该工具设计用于在Android设备上运行,利用adb工具操控Unity游戏,兼容所有版本的Android系统。GAutomator的主要目标是...

    An introduction to TMO and Sprint Wi-Fi calling-v1.0-demo

    Wi-Fi通话技术是一种让移动设备在Wi-Fi网络覆盖范围内进行语音通话、视频通话以及发送短信的服务。本介绍主要聚焦于T-Mobile(TMO)和Sprint两家运营商的Wi-Fi通话实现,涵盖了用户体验、终端实现、IMS网络支持、SIP...

    高仿QQ2014,MDI,主题换肤

    8.窗体加入了MobileApi属性,指示窗体是调用API移动窗体还是代码模拟移动窗体(1.Api移动窗体弊端:控件过多,移动会卡。利:win7及以上系统有摇晃窗体最小化其他程序的功能,就是与原生窗体无差别的效果) 9.窗体加入...

    MediaTek PreLoader USB VCOM

    1. "使用说明.url":这是一个快捷方式文件,指向网络上的使用指南或教程,帮助用户理解和使用MediaTek PreLoader USB VCOM驱动程序。 2. "提示无驱动-解决INF无效":这可能是一个文档或解决方案,用于解决在安装...

    vs2017下xamarin开发二维码扫描应用

    1. **Xamarin.Forms**:Xamarin.Forms是Xamarin的一个组件,它允许开发者创建可复用的用户界面,这些界面可以跨多个平台运行。不过,由于我们这里需要实现的是原生的扫描功能,可能不会直接使用Xamarin.Forms,而是...

    jquery-easyui-1.5.3

    4. **jQuery EasyUI Mobile.js**: 这是EasyUI的移动端版本,针对手机和平板设备进行了优化,确保在小屏幕设备上也能提供良好的用户体验。 5. **Changelog.txt**: 提供了自上一版本以来的更改记录,包括新增功能、...

Global site tag (gtag.js) - Google Analytics