AutoCAD 3DMAX C语言 Pro/E UG JAVA编程 PHP编程 Maya动画 Matlab应用 Android
Photoshop Word Excel flash VB编程 VC编程 Coreldraw SolidWorks A Designer Unity3D
 首页 > JAVA编程

Windows CE, PocketPC上的Java编程

51自学网 2015-09-02 http://www.wanshiok.com

  网络联机的过程介绍

  笔者先为各位介绍一下基本的Java网络程序联机的原理,如图10-4所述在Server端要先开启一个连接阜准备接收Client的联机,当一收到Client端的联机的时候便可以将Server的位置及连接阜号(Socket)传给Client然后Client便取联机的信息再将资料及Socket一起透过网络(Socket记载着IP Address及Port)将讯息送到Server端,就可以开始和作交易啰!

  图Client-Server联机示意图

  

  开始撰写网络程序吧!!

  我们先撰写一个简单的Server吧!!

  import java.io.*;

  import java.net.*;

  public class netServer {

  String clientMessage;

  ServerSocket sSocket; //宣告使用ServerSocket的类别

  Socket csocket; //取得Client联机封包的Socket,各为别想太多就是Client端的联机

  public netServer() {

  try {

  sSocket = new ServerSocket(900,200); //开启Port 900,并限定Client联机的数量为200,若开启正常则开始等待Client端的联机

  csocket = sSocket.accept(); //Client端已经联机上了取得Socket

  System.out.println("取得一个Client端从 "+csocket.getInetAddress().getHostAddress()); //显示出Client IP

  }

  catch(IOException ioe) {

  System.out.println("开启Server异常!!!");

  }

  }

  public static void main(String[] args) {

  new netServer();

  }

  }

  执行

  编译成功后打java netServer画面如下图所示就会开始等待接受Client端的要求啰!!

  图netServer开始等待Client端发出要求

  

  接着我们切换到DOS模式(再开一个DOS窗口)输入telnet 127.0.0.1 900(注意空格)画面会一闪就过去了。接着我们观察Server的画面是否有出现取得一个Client端从 127.0.0.1如下图图10-4所示。接着我们就开始撰写PocketPC中的Client吧!!

  图netServer开始等待Client端发出要求

  

  注意

  目前Server的程序皆在PC端执行喔!!待下个Client范例开始才移到PocketPC中执行。

  打造个Hello NetWork吧!! 皆下来我们撰写个输入您的姓名,Server会打对您打招呼的程序吧!!这个程序的原理是在Server端执行一个无线回圈,然后提供服务如接受到Client传来的讯息之后就传回一个讯息Hello的讯息给Client,另外我们为了达到一次能够同时服务多个使用者所以我们使用了Thread的技术。

  //此为Server端程序

  import java.io.*;

  import java.net.*;

  public class netHelloServer {

  String clientMessage; ServerSocket sSocket; //宣告使用ServerSocket的类别

  Socket csocket; //取得Client联机封包的Socket,各为别想太多就是Client端的联机

  public netHelloServer() {

  try {

  sSocket = new ServerSocket(900,200); //开启Port 900,并限定Client联机的数量为200,若开启正常则开始等待Client端的联机

  while(true) {

  csocket=sSocket.accept();

  Thread t=new MyThread(csocket);

  t.start();

  }

  }

  catch(IOException ioe) {

  System.out.println("开启Server异常!!!");

  }

  }

  public static void main(String[] args) {

  new netHelloServer();

  }

  }

  class MyThread extends Thread { Socket conn; String tempStr; DataInputStream dis; DataOutputStream dos; //建构者

  public MyThread(Socket inSocket) { conn = inSocket; }

  public void run() {

  try{

  System.out.println("Server go connect from:"+conn.getInetAddress().getHostName());

  dos = new DataOutputStream(conn.getOutputStream());

  dos.writeUTF("输入您的姓名的资料"); //get the request conntent

  dis = new DataInputStream(conn.getInputStream());

  tempStr = dis.readUTF(); //响应一下

  dos.writeUTF("您输入的资料为"+tempStr+"系统正在为您准备中请稍后..."); //复杂的动作可以写在这边

  dos.writeUTF(tempStr+" 您好...");

  System.out.println("Server recivews data ="+tempStr);

  conn.close();//断线

  }

  catch(IOException e) {

  System.out.println(e);

  }

  }

  }

  //Client端的程序

  import java.awt.*;

  import java.awt.event.*;

  import java.net.*;

  import java.io.*;

  public class HelloClient extends Frame {

  Label lb1 = new Label("请输入姓名");

  TextField tf1 = new TextField("",14);

  Label lb2 = new Label("请输入Server的IP");

  TextField tf2 = new TextField("",14);

  TextArea ta1 = new TextArea("");

  Button btn1 = new Button("送出讯息");

  Button btn2 = new Button("离开");

  Panel pl1 = new Panel();

  Panel pl2 = new Panel();

  static Socket csocket = null;

  MouseClickevent bce = new MouseClickevent();

  public HelloClient() { //窗口设定

  btn1.addMouseListener (bce);

  btn2.addMouseListener (bce);

  pl1.setLayout(new GridLayout(2,1));

  pl1.add(lb1); pl1.add(tf1); pl1.add(lb2); pl1.add(tf2);

  add(pl1,BorderLayout.NORTH);

  add(ta1,BorderLayout.CENTER);

  pl2.add(btn1); pl2.add(btn2);

  add(pl2,BorderLayout.SOUTH);

  setSize(240,320);

  setVisible(true);

  }

  public static void main(String[] args) {

  new HelloClient();

  } //以下为按钮事件处理

  class MouseClickevent implements MouseListener {

  public void mouseClicked(MouseEvent e) {}

  public void mousePressed(MouseEvent e) {

  if(e.getSource() == btn1) {

  if(!tf2.getText().equals("")&&!tf1.getText().equals(""))

  try{

  //csocket = new Socket("127.0.0.1",900);

  csocket = new Socket(tf2.getText(),900);

  DataInputStream dis = new DataInputStream(csocket.getInputStream());

  String data = dis.readUTF();

  //System.out.println("/nClient get datafrom server = "+data);

  ta1.append("/n送一个讯息到Server: "+data); //write response to server

  DataOutputStream dos = new DataOutputStream(csocket.getOutputStream()); //dos.writeUTF("Bye! all done");

  dos.writeUTF(tf1.getText());

  data = "";

  data = dis.readUTF();

  //System.out.println("Client get datafrom server = "+data);

  ta1.append("/n收到Server的讯息: "+data);

  data = dis.readUTF();

  //System.out.println("Client get datafrom server = "+data);

  ta1.append("/n收到Server的讯息: "+data); csocket.close();

  }

  catch(IOException IOe) {

  System.out.println(e);

  }

  }

  else if(e.getSource() == btn2) {

  //System.out.println("Btn2 is Clicked");

  System.exit(1);

  }

  }

  public void mouseReleased(MouseEvent e) {}

  public void mouseEntered(MouseEvent e) {}

  public void mouseExited(MouseEvent e) {}

  }

  }

  编译及激活程序 Server端 执行方法在PC端编译及执行 javac –classpath %pjeeclasspath%;. netHelloServer.java(编译) java –classpath %pjeeclasspath%;. netHelloServer(执行)

  图 netServer开始等待Client端发出要求

  

  注意

  Server激活之后就不要关掉了,可以测试Client端的联机。

  Client端 请各位读者照着下面输入指令,记得您的PocketPC要连上网络唷!! javac –classpath %pjeeclasspath%;. Clinet.java(Enter) java –classpath %pjeeclasspath%;. Client(Enter)

  图Client的仿真器画面

  

  图 在PDA中的画面

  

  注意!!

  1. 各位读者可以从程序中注意到Server端及Client端中的Read及Write是互相对称的,希望大家在撰写程序中需要这个要点。

  2. 配合无线网络卡、是蓝芽技术、及行动通讯等技术,这就是相当实用的应用程序了,感谢人类创造了网络还有Java。

  一个URL的类别需要下面几个两个主要的参数: 协议的定义(如http或是ftp)等 资源的名称(包含网址或是port) 关于URL的部分笔者只有为各位作简单的介绍,接着附上个读取网页的范例,当然啦!!先玩玩看啰!!然后再讨论一下吧。

  //httptest.java

  import java.awt.*;

  import java.awt.event.*;

  import java.net.*;

  import java.io.*;

  public class httptest extends Frame

  {

  private Label lb1 = new Label("URL");

  private TextField tf1 = new TextField(10);

  private TextArea ta1 = new TextArea();

  private Button btn1 = new Button("Get");

  Panel p1 = new Panel();

  public httptest()

  {

  p1.add(lb1);

  p1.add(tf1);

  p1.add(btn1);

  //sp1.add(ta1);

  add(p1,BorderLayout.NORTH);

  add(ta1,BorderLayout.CENTER);

  btn1.addActionListener(new btn1ActionEvent());

  setSize(240,320); //for iPAQ

  setVisible(true);

  }

  public static void main(String args[])

  {

  new httptest();

  }

  class btn1ActionEvent implements ActionListener

  {

  public void actionPerformed(ActionEvent e)

  {

  String URLStr;

  try

  {

  //开启一个新的URL对象

  URL u = new URL(tf1.getText());

  ta1.append("/t You hava entered:"+lb1.getText()+"/n");

  ta1.append("/t URL info"+u.toString()+"/n");

  InputStreamReader ir = new InputStreamReader(u.openStream());

  BufferedReader bf = new BufferedReader(ir);

  ta1.append("/t URL stream connection: Read file now.../n");

  String aLine;

  while((aLine = bf.readLine())!=null)

  {

  ta1.append(aLine + "/n");

  }

  bf.close();

  ir.close();

  }

  catch(MalformedURLException mue)

  {

  //System.out.println("网址不正确");

  }

  catch(IOException ioe)

  {

  //System.out.println("Error "+ioe);

  }

  }

  }

  }

  编译及执行程序

  javac –classpath %pjeeclasspath%;. httptest.java(编译)

  pjava –classpath %pjeeclasspath%;. httptest (执行)

  接着输入个网址,记得要连上网络啊!!笔者是输http://www.javatwo.net,接着会跑出很多很多东西唷!!

  图 在仿真器中的画面(1)

  

  图 在仿真器中的画面(2)

  

  相信大家都觉得很奇怪,为什么无法看看到如我们浏览器一般的美丽图样及文字呢?因为我们必须要在为这些取得的字符串还有档案作剖析(parse)的动作,如读到了图形的字节就需要使用使用绘图软件打开,读到音乐的字节就需要使用媒体播放工具来开启,这是可一门相当大的学问也是相当的苦工唷。

<

 

 

 
说明
:本教程来源互联网或网友上传或出版商,仅为学习研究或媒体推广,wanshiok.com不保证资料的完整性。
 
上一篇:J2ME游戏开发的高级优化技巧  下一篇:J2ME中使用Canvas制作简单的游戏菜单