网络联机的过程介绍
先介绍一下基本的java网络程序联机的原理,如图所述在server端要先开启一个连接阜准备接收client的联机,当一收到client端的联机的时候便可以将server的位置及连接(socket)传给client然后client便取联机的信息再将资料及 socket一起透过网络(socket记载着ip address及port)将讯息送到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端的要求。

接着我们切换到dos模式(再开一个dos窗口)输入telnet 127.0.0.1 900(注意空格)画面会一闪就过去了。接着我们观察server的画面是否有出现取得一个client端从127.0.0.1如下图所示。接着我们就开始撰写pocketpc中的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) {}
}
}
闽公网安备 35060202000074号