| |
网络联机的过程介绍 先介绍一下基本的java网络程序联机的原理,如图所述在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如下图所示。接着我们就开始撰写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) {} } }
|
|