服务端:
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#编程示例,主要展示了如何实现条码扫描功能,并在扫描完成后自动保存相关信息。这个项目对于理解C#中的条码处理技术,以及事件驱动编程和文件操作有很好的学习价值。 在C#...
1. **统一的触控体验**:jQuery Mobile提供了一套跨平台的触控事件处理机制,确保在各种设备上的滑动、点击等操作有统一的反馈。 2. **自动页面导航**:通过数据-URL(data-url)属性和页面容器,jQuery Mobile可以...
1. **触摸优化**:jQuery Mobile 为移动设备上的手势事件(如滑动、点击、双击等)提供了内置支持,确保在触屏设备上的交互体验流畅。 2. **页面结构和导航**:通过使用特定的 HTML5 标签(如 `...
AmazeUI是一款基于移动优先(Mobile First)理念的前端开发框架,专为构建响应式、高性能的Web应用而设计。这个名为"AmazeUiDemoAll"的压缩包包含了一些使用AmazeUI进行实践的示例,旨在帮助学习者更好地理解和应用...
React Mobile QQMusic Demo 是一个基于React Mobile框架的QQ音乐移动端应用的示例项目。这个项目主要是为了展示如何利用React Mobile库来构建一个功能完备、用户体验良好的移动音乐播放应用。React Mobile是一个专为...
压缩包中的"Mobiledemo"、"2012Demo"和"2010demo"是三个不同的项目实例,分别对应VS2008、VS2010和VS2012的演示。每个项目都包含了一个或多个C#源代码文件,展示了如何在这些版本的Visual Studio中集成SQLite,并...
腾讯联运MSDK Demo是腾讯推出的一款用于游戏和应用联合运营的移动软件开发工具包(Mobile Service Development Kit)。这个SDK旨在帮助开发者轻松地整合腾讯的各项服务,如社交登录、支付、分享、广告等,以便在多个...
本次我们将深入探讨"车FunCar Kit V20 - Mobile Update"这一主题,它是一个基于Unity引擎的车模型简易demo,专为移动设备优化,旨在为开发者提供一个便捷的起点,快速构建和测试车载系统或赛车游戏的原型。...
mui,全称Mobile UI,是由DCloud(即海马云)开发的一款开源的移动端轻量级UI框架,特别适用于H5页面和微信小程序的开发。它以其简洁的API、丰富的组件库以及高效的性能,受到了广大开发者的好评。mui的设计理念是让...
1. 这是一个针对EMDK 2.4的Mobile EDA设备条码读码Demo 2. 需要注意的是:在关闭窗体时要记得加上barcode1.EnableScanner = false;这句 代码 3. 适合于MC50、MC70、MC5590等设备 Email:baifucn@139....
- **demo-mobile**: 示例代码,展示了如何在移动环境中使用 jQuery EasyUI,提供了实践和学习的参考。 5. **多语言支持**: - **locale**: 这个目录可能包含各种语言的本地化文件,使得应用可以根据用户的选择...
- 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】是一份详细指导如何通过Python进行Unity手游UI自动化测试的文档。该工具设计用于在Android设备上运行,利用adb工具操控Unity游戏,兼容所有版本的Android系统。GAutomator的主要目标是...
Wi-Fi通话技术是一种让移动设备在Wi-Fi网络覆盖范围内进行语音通话、视频通话以及发送短信的服务。本介绍主要聚焦于T-Mobile(TMO)和Sprint两家运营商的Wi-Fi通话实现,涵盖了用户体验、终端实现、IMS网络支持、SIP...
8.窗体加入了MobileApi属性,指示窗体是调用API移动窗体还是代码模拟移动窗体(1.Api移动窗体弊端:控件过多,移动会卡。利:win7及以上系统有摇晃窗体最小化其他程序的功能,就是与原生窗体无差别的效果) 9.窗体加入...
1. "使用说明.url":这是一个快捷方式文件,指向网络上的使用指南或教程,帮助用户理解和使用MediaTek PreLoader USB VCOM驱动程序。 2. "提示无驱动-解决INF无效":这可能是一个文档或解决方案,用于解决在安装...
1. **Xamarin.Forms**:Xamarin.Forms是Xamarin的一个组件,它允许开发者创建可复用的用户界面,这些界面可以跨多个平台运行。不过,由于我们这里需要实现的是原生的扫描功能,可能不会直接使用Xamarin.Forms,而是...
4. **jQuery EasyUI Mobile.js**: 这是EasyUI的移动端版本,针对手机和平板设备进行了优化,确保在小屏幕设备上也能提供良好的用户体验。 5. **Changelog.txt**: 提供了自上一版本以来的更改记录,包括新增功能、...