- 浏览: 204503 次
- 性别:
- 来自: 湖南
文章分类
最新评论
1、Socket编程
Socket是什么
Socket是套接字,基于TCP协议的传输支持Socket
开发流程:
服务器监听某个端口
客户端连接服务器的某个端口
通过SocketConnection通信
服务器监听某个端口
javax.microedition.io.ServerSocketConnection
javax.microedition.io.Connector专门负责建立各种连接
open(“socket://:端口”),返回ServerSocketConnection
ServerSocketConnection可以获得服务器IP和端口
如果有客户连上来,可以用ServerSocketConnection.acceptAndOpen()返回SocketConnection
客户端连接服务器端
javax.microedition.io.Connector专门负责建立各种连接
open(“socket://IP地址:端口”),返回SocketConnection
SocketConnection重要方法:
getAddress() :得到客户端地址
setSocketOption: 设置一些参数,一般可以用默认
openDataInputStream/ openInputStream:打开输入流
openDataOutputStream/ openOutputStream:打开输出流
实例:客户端和服务器端连接,当客户端连上之后,能够和服务器端聊天.两端都有一个文本框输入聊天信息,点击“发送”,能够在另一端收取之后显示。注意,一切都是自动的,所以要用到多线程(单聊)
实例:聊天室开发
客户端和服务器端连接,当客户端连上之后,能够和服务器端聊天.两端都有一个文本框输入聊天信息,点击“发送”,能够在另一端收取之后显示。注意,一切都是自动的,所以要用到多线程,服务器运行,多个客户端都能够连接到服务器,当连上时,服务器送给客户端一条信息:欢迎您的到来,客户端能给服务器端发信息,信息显示在服务器端,显示为XXX说:????(多聊)
2、UDP编程
UDP是什么
UDP是数据报,只负责传输信息,并不能保证信息一定会被收到,TCP基于连接,UDP基于报文,具体大家可以参考计算机网络
开发流程:
服务器监听某个端口
客户端连接服务器的某个端口
通过Datagram通信
服务器监听某个端口
javax.microedition.io. UDPDatagramConnection
javax.microedition.io.Connector专门负责建立各种连接
open(“datagram://:端口”),返回UDPDatagramConnection
UDPDatagramConnection可以获得服务器IP和端口
客户端连接服务器端
javax.microedition.io.Connector专门负责建立各种连接
open(“datagram://IP地址:端口”),返回UDPDatagramConnection
UDPDatagramConnection重要方法:
newDatagram()
receive()
send()
实例:
客户端和服务器端连接,当客户端连上之后,能够和服务器端聊天.两端都有一个文本框输入聊天信息,点击“发送”,能够在另一端收取之后显示。注意,一切都是自动的,所以要用到多线程
3、HTTP编程
HTTP是一种可以选用的方法
手机--》J2EE--》服务器--》Http响应--》手机
安装HTTP服务器
安装Tomcat: http://www.apache.org
绑定JDK
测试
重要目录:bin; conf;webapps/root;
修改端口
具体可以参见J2EE资料
连接到HTTP服务器
javax.microedition.io.Connector专门负责建立各种连接
open(“http://IP地址:端口”),返回HttpConnection
HttpConnection重要方法:
int getResponseCode()
String getResponseMessage()
String getHost() / int getPort() / String getProtocol() /String getURL()
String getQuery()
String getRequestMethod()
void setRequestMethod(String method)
openDataInputStream, openInputStream
openDataOutputStream, openOutputStream
实例:
界面上有一个账号框,密码框,输入账号密码,由HTTP服务器进行验证,在数据库中查询看是否含有这个用户.
Socket是什么
Socket是套接字,基于TCP协议的传输支持Socket
开发流程:
服务器监听某个端口
客户端连接服务器的某个端口
通过SocketConnection通信
服务器监听某个端口
javax.microedition.io.ServerSocketConnection
javax.microedition.io.Connector专门负责建立各种连接
open(“socket://:端口”),返回ServerSocketConnection
ServerSocketConnection可以获得服务器IP和端口
如果有客户连上来,可以用ServerSocketConnection.acceptAndOpen()返回SocketConnection
客户端连接服务器端
javax.microedition.io.Connector专门负责建立各种连接
open(“socket://IP地址:端口”),返回SocketConnection
SocketConnection重要方法:
getAddress() :得到客户端地址
setSocketOption: 设置一些参数,一般可以用默认
openDataInputStream/ openInputStream:打开输入流
openDataOutputStream/ openOutputStream:打开输出流
实例:客户端和服务器端连接,当客户端连上之后,能够和服务器端聊天.两端都有一个文本框输入聊天信息,点击“发送”,能够在另一端收取之后显示。注意,一切都是自动的,所以要用到多线程(单聊)
package example; import java.io.DataInputStream; import java.io.DataOutputStream; import javax.microedition.io.Connector; import javax.microedition.io.ServerSocketConnection; import javax.microedition.io.SocketConnection; 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; import javax.microedition.midlet.MIDletStateChangeException; public class ChatServerMIDlet extends MIDlet implements CommandListener{ private ServerSocketConnection ssc = null; private SocketConnection sc = null; private DataInputStream dis = null; private DataOutputStream dos = null; private TextField tfMsg = new TextField("输入聊天信息","",255,TextField.ANY); private Command cmdSend = new Command("发送",Command.SCREEN,1); private Form frmChat = new Form("聊天界面"); private Display display; protected void startApp() throws MIDletStateChangeException { display = Display.getDisplay(this); display.setCurrent(frmChat); frmChat.addCommand(cmdSend); frmChat.append(tfMsg); frmChat.setCommandListener(this); try{ ssc = (ServerSocketConnection)Connector.open("socket://:9999"); sc = (SocketConnection)ssc.acceptAndOpen(); dis = sc.openDataInputStream(); dos = sc.openDataOutputStream(); new ReceiveThread().start(); }catch(Exception ex){ ex.printStackTrace(); } } public void commandAction(Command c,Displayable d){ if(c==cmdSend){ try{ dos.writeUTF(tfMsg.getString()); }catch(Exception ex){} } } class ReceiveThread extends Thread{ public void run(){ while(true){ try{ String msg = dis.readUTF(); frmChat.append(msg + "\n"); }catch(Exception ex){ex.printStackTrace();} } } } protected void destroyApp(boolean arg0) throws MIDletStateChangeException { // TODO Auto-generated method stub } protected void pauseApp() { // TODO Auto-generated method stub } }
package example; import java.io.DataInputStream; import java.io.DataOutputStream; import javax.microedition.io.Connector; import javax.microedition.io.SocketConnection; 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; import javax.microedition.midlet.MIDletStateChangeException; import example.ChatServerMIDlet.ReceiveThread; public class ChatClientMIDlet extends MIDlet implements CommandListener{ private SocketConnection sc = null; private DataInputStream dis = null; private DataOutputStream dos = null; private TextField tfMsg = new TextField("输入聊天信息","",255,TextField.ANY); private Command cmdSend = new Command("发送",Command.SCREEN,1); private Form frmChat = new Form("聊天界面"); private Display display; protected void startApp() throws MIDletStateChangeException { display = Display.getDisplay(this); display.setCurrent(frmChat); frmChat.addCommand(cmdSend); frmChat.append(tfMsg); frmChat.setCommandListener(this); try{ sc = (SocketConnection)Connector.open("socket://127.0.0.1:9999"); dis = sc.openDataInputStream(); dos = sc.openDataOutputStream(); new ReceiveThread().start(); }catch(Exception ex){ ex.printStackTrace(); } } public void commandAction(Command c,Displayable d){ if(c==cmdSend){ try{ dos.writeUTF(tfMsg.getString()); }catch(Exception ex){} } } class ReceiveThread extends Thread{ public void run(){ while(true){ try{ String msg = dis.readUTF(); frmChat.append(msg + "\n"); }catch(Exception ex){} } } } protected void destroyApp(boolean arg0) throws MIDletStateChangeException { // TODO Auto-generated method stub } protected void pauseApp() { // TODO Auto-generated method stub } }
实例:聊天室开发
客户端和服务器端连接,当客户端连上之后,能够和服务器端聊天.两端都有一个文本框输入聊天信息,点击“发送”,能够在另一端收取之后显示。注意,一切都是自动的,所以要用到多线程,服务器运行,多个客户端都能够连接到服务器,当连上时,服务器送给客户端一条信息:欢迎您的到来,客户端能给服务器端发信息,信息显示在服务器端,显示为XXX说:????(多聊)
package example5; import java.io.DataInputStream; import java.io.DataOutputStream; import java.util.Vector; import javax.microedition.io.Connector; import javax.microedition.io.ServerSocketConnection; import javax.microedition.io.SocketConnection; import javax.microedition.lcdui.Display; import javax.microedition.lcdui.Form; import javax.microedition.midlet.MIDlet; import javax.microedition.midlet.MIDletStateChangeException; public class ChatServerMIDlet extends MIDlet implements Runnable{ private ServerSocketConnection ssc = null; private SocketConnection sc = null; private Form frm = new Form("聊天纪录"); private Display dis; private Vector v = new Vector(); protected void startApp() throws MIDletStateChangeException { dis = Display.getDisplay(this); dis.setCurrent(frm); try{ ssc = (ServerSocketConnection)Connector.open("socket://:9999"); new Thread(this).start(); }catch(Exception ex){ ex.printStackTrace(); } } public void run(){ while(true){//不断接受客户端连接 try{ sc = (SocketConnection)ssc.acceptAndOpen(); //开一个线程给这个客户端 ChatThread ct = new ChatThread(sc); v.addElement(ct);//将线程添加进集合 ct.start(); }catch(Exception ex){ ex.printStackTrace(); } } } class ChatThread extends Thread{ private SocketConnection sc; private DataInputStream dis; private DataOutputStream dos; private String nickName; public ChatThread(SocketConnection sc){ this.sc = sc; this.nickName = nickName; try{ dis = sc.openDataInputStream(); dos = sc.openDataOutputStream(); //读取昵称 nickName = dis.readUTF(); frm.append(nickName); }catch(Exception ex){ ex.printStackTrace(); } } public void run(){//负责读取相应SocketConnection的信息 while(true){ try{ String str = dis.readUTF(); //将该信息发送给所有客户端 //访问集合中的所有线程 for(int i=0;i<v.size();i++){ ChatThread ct = (ChatThread)v.elementAt(i); ct.dos.writeUTF(nickName + "说:" + str); } }catch(Exception ex){ ex.printStackTrace(); } } } } protected void destroyApp(boolean arg0) throws MIDletStateChangeException { // TODO Auto-generated method stub } protected void pauseApp() { } }
package example5; import java.io.DataInputStream; import java.io.DataOutputStream; import javax.microedition.io.Connector; import javax.microedition.io.SocketConnection; 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; import javax.microedition.midlet.MIDletStateChangeException; public class ChatClientMIDlet extends MIDlet implements CommandListener{ private SocketConnection sc = null; private DataInputStream dis = null; private DataOutputStream dos = null; private TextField tfMsg = new TextField("输入聊天信息","",255,TextField.ANY); private Command cmdSend = new Command("发送",Command.SCREEN,1); private Form frmChat = new Form("聊天界面"); private Display display; private TextField tfNickName = new TextField("输入昵称","",10,TextField.ANY); private Command cmdLogin = new Command("登陆到服务器",Command.SCREEN,1); protected void startApp() throws MIDletStateChangeException { display = Display.getDisplay(this); display.setCurrent(frmChat); frmChat.addCommand(cmdLogin); frmChat.append(tfNickName); frmChat.setCommandListener(this); } public void commandAction(Command c,Displayable d){ if(c==cmdSend){ try{ dos.writeUTF(tfMsg.getString()); }catch(Exception ex){} } else if(c==cmdLogin){ try{ frmChat.removeCommand(cmdLogin); frmChat.addCommand(cmdSend); frmChat.append(tfMsg);//添加发送聊天信息的文本框 new ChatThread().start(); }catch(Exception ex){ ex.printStackTrace(); } } } class ChatThread extends Thread{ public void run(){ try{ sc = (SocketConnection)Connector.open("socket://127.0.0.1:9999"); dis = sc.openDataInputStream(); dos = sc.openDataOutputStream(); dos.writeUTF(tfNickName.getString());//发送昵称 this.start(); }catch(Exception ex){ ex.printStackTrace(); } while(true){ try{ String msg = dis.readUTF(); frmChat.append(msg + "\n"); }catch(Exception ex){} } } } protected void destroyApp(boolean arg0) throws MIDletStateChangeException { // TODO Auto-generated method stub } protected void pauseApp() { // TODO Auto-generated method stub } }
2、UDP编程
UDP是什么
UDP是数据报,只负责传输信息,并不能保证信息一定会被收到,TCP基于连接,UDP基于报文,具体大家可以参考计算机网络
开发流程:
服务器监听某个端口
客户端连接服务器的某个端口
通过Datagram通信
服务器监听某个端口
javax.microedition.io. UDPDatagramConnection
javax.microedition.io.Connector专门负责建立各种连接
open(“datagram://:端口”),返回UDPDatagramConnection
UDPDatagramConnection可以获得服务器IP和端口
客户端连接服务器端
javax.microedition.io.Connector专门负责建立各种连接
open(“datagram://IP地址:端口”),返回UDPDatagramConnection
UDPDatagramConnection重要方法:
newDatagram()
receive()
send()
实例:
客户端和服务器端连接,当客户端连上之后,能够和服务器端聊天.两端都有一个文本框输入聊天信息,点击“发送”,能够在另一端收取之后显示。注意,一切都是自动的,所以要用到多线程
package example; import java.util.Vector; import javax.microedition.io.Connector; import javax.microedition.io.Datagram; import javax.microedition.io.UDPDatagramConnection; 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; import javax.microedition.midlet.MIDletStateChangeException; public class ChatServerMIDlet extends MIDlet implements CommandListener,Runnable{ private TextField tfMsg = new TextField("输入聊天信息","",255,TextField.ANY); private Command cmdSend = new Command("发送",Command.SCREEN,1); private Form frmChat = new Form("聊天界面"); private Display display; private UDPDatagramConnection udc = null; private final int MAX = 255; private String address; protected void startApp() throws MIDletStateChangeException { display = Display.getDisplay(this); display.setCurrent(frmChat); frmChat.addCommand(cmdSend); frmChat.append(tfMsg); frmChat.setCommandListener(this); try{ udc = (UDPDatagramConnection)Connector.open("datagram://:9999"); new Thread(this).start(); }catch(Exception ex){ ex.printStackTrace(); } } public void commandAction(Command c,Displayable d){ if(c==cmdSend){//发送 String msg = tfMsg.getString(); try{ Datagram dg = udc.newDatagram(msg.getBytes(), msg.getBytes().length); dg.setAddress(address); udc.send(dg); }catch(Exception ex){ ex.printStackTrace(); } } } public void run(){ while(true){ try{ Datagram dg = udc.newDatagram(MAX); udc.receive(dg); address = dg.getAddress(); String msg = new String(dg.getData(),0,dg.getLength()); frmChat.append(msg + "\n"); }catch(Exception ex){ ex.printStackTrace(); } } } protected void destroyApp(boolean arg0) throws MIDletStateChangeException { // TODO Auto-generated method stub } protected void pauseApp() { // TODO Auto-generated method stub } }
package example; import javax.microedition.io.Connector; import javax.microedition.io.Datagram; import javax.microedition.io.UDPDatagramConnection; 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; import javax.microedition.midlet.MIDletStateChangeException; public class ChatClientMIDlet extends MIDlet implements CommandListener,Runnable{ private TextField tfMsg = new TextField("输入聊天信息","",255,TextField.ANY); private Command cmdSend = new Command("发送",Command.SCREEN,1); private Form frmChat = new Form("聊天界面"); private Display display; private UDPDatagramConnection udc = null; private final int MAX = 255; protected void startApp() throws MIDletStateChangeException { display = Display.getDisplay(this); display.setCurrent(frmChat); frmChat.addCommand(cmdSend); frmChat.append(tfMsg); frmChat.setCommandListener(this); try{ udc = (UDPDatagramConnection)Connector.open("datagram://127.0.0.1:9999"); new Thread(this).start(); }catch(Exception ex){ ex.printStackTrace(); } } public void commandAction(Command c,Displayable d){ if(c==cmdSend){//发送 String msg = tfMsg.getString(); try{ Datagram dg = udc.newDatagram(msg.getBytes(), msg.getBytes().length); udc.send(dg); }catch(Exception ex){ ex.printStackTrace(); } } } public void run(){ while(true){ try{ Datagram dg = udc.newDatagram(MAX); udc.receive(dg); String msg = new String(dg.getData(),0,dg.getLength()); frmChat.append(msg + "\n"); }catch(Exception ex){ ex.printStackTrace(); } } } protected void destroyApp(boolean arg0) throws MIDletStateChangeException { // TODO Auto-generated method stub } protected void pauseApp() { // TODO Auto-generated method stub } }
3、HTTP编程
HTTP是一种可以选用的方法
手机--》J2EE--》服务器--》Http响应--》手机
安装HTTP服务器
安装Tomcat: http://www.apache.org
绑定JDK
测试
重要目录:bin; conf;webapps/root;
修改端口
具体可以参见J2EE资料
连接到HTTP服务器
javax.microedition.io.Connector专门负责建立各种连接
open(“http://IP地址:端口”),返回HttpConnection
HttpConnection重要方法:
int getResponseCode()
String getResponseMessage()
String getHost() / int getPort() / String getProtocol() /String getURL()
String getQuery()
String getRequestMethod()
void setRequestMethod(String method)
openDataInputStream, openInputStream
openDataOutputStream, openOutputStream
实例:
界面上有一个账号框,密码框,输入账号密码,由HTTP服务器进行验证,在数据库中查询看是否含有这个用户.
package com.cn; import java.io.DataInputStream; import java.io.IOException; import javax.microedition.io.Connector; import javax.microedition.io.HttpConnection; 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; import javax.microedition.midlet.MIDletStateChangeException; public class HttpServer extends MIDlet implements CommandListener { private Display dis; private Form fr = new Form("登录"); private TextField tname = new TextField("账号:","",255,TextField.ANY); private TextField tpass = new TextField("密码:", "", 255, TextField.PASSWORD); private Command cmdSend = new Command("发送", Command.SCREEN, 0); public HttpServer() { } protected void destroyApp(boolean arg0) throws MIDletStateChangeException { } protected void pauseApp() { } protected void startApp() throws MIDletStateChangeException { dis = Display.getDisplay(this); dis.setCurrent(fr); fr.addCommand(cmdSend); fr.append(tname); fr.append(tpass); fr.setCommandListener(this); } public void commandAction(Command c, Displayable d) { if(c == cmdSend){ new Thread(new Runnable() { public void run() { try { HttpConnection hc = (HttpConnection) Connector.open("http://127.0.0.1/index.php?name="+ tname.getString()+"&pass="+tpass.getString()); DataInputStream din = hc.openDataInputStream(); byte[] b =new byte[(int)hc.getLength()]; din.read(b); fr.append(new String(b)); } catch (IOException e) { e.printStackTrace(); } } }).start(); } } }
<?php $name = $_GET['name']; $pass = $_GET['pass']; if($name == "ABC" && $pass ==123) { echo $name."登录成功!"; }else{ echo $name."登录失败!"; } ?>
- J2me源代码.rar (1.1 MB)
- 下载次数: 2
发表评论
-
J2ME代码优化
2011-01-17 10:09 915为什么要优化 CPU不快:10-400MHz 内存有限 ... -
GameAPI
2011-01-17 10:06 1696游戏画布,图层和游戏精灵 简介 javax.microed ... -
MSRMS编程
2011-01-13 08:35 988基础知识 持久化存储的 ... -
画布开发
2011-01-12 13:48 1210CanvasCanvas绘图 画布属于低级界面 Canva ... -
高级开发
2011-01-07 14:08 862高级开发 异常处理 异常的出现 程序运行时由于一些不可预知的 ... -
高级界面开发
2011-01-06 08:33 1015高级界面开发 1:基本界 ... -
体系介绍和环境配置
2010-12-20 14:16 816J2ME简介 Three Java Platforms ...
相关推荐
《Java网络编程第三版》是Java开发者深入理解网络编程的重要参考资料。这本书主要涵盖了Java平台上的网络应用程序开发,从基础概念到高级技术,为读者提供了一套全面的学习路径。以下是本书中涉及的一些关键知识点:...
Windows 网络编程 概述 Windows 网络编程是指在 Windows 操作系统平台上进行网络编程的技术,涉及到 Windows Socket、网络协议、网络应用程序的开发等方面。 Windows 网络编程的主要目的是实现高性能的网络应用...
扫描版 超清百度网盘资源!!! 为初学者准备的网络编程! 韩国TCP/IP经典教程!... 本书针对网络编程初学者,面向具备C语言基础的套接字网络编程学习者,适合所有希望学习Linux和Windows网络编程的人。
C++网络编程是计算机科学中的一个重要领域,它允许开发者创建能够通过网络进行通信的应用程序。这份"C++网络编程文档"涵盖了这一主题的广泛内容,旨在帮助程序员深入理解并掌握网络编程的基本概念和技术。 首先,...
《C#网络编程实例教程源代码》是一份深入浅出的教学资源,旨在帮助开发者掌握C#语言在网络编程领域的应用。这份教程结合了理论与实践,提供了丰富的源代码示例,让学习者能够通过实际操作来理解和掌握网络编程的核心...
《Linux网络编程教程》这本书是Linux系统中进行网络编程的重要参考资料。它涵盖了广泛的知识点,旨在帮助读者理解和掌握如何在Linux环境下开发网络应用程序。以下是对这些主题的详细阐述: 1. **网络编程基础**:...