网络联机的过程介绍 笔者先为各位介绍一下基本的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不保证资料的完整性。
1/2 1 2 下一页 尾页 |