|
程序简介
服务器端代码的编写
客户端和服务器端采用Socket连接。服务器端需要时刻监听客户的请求(如图4),一旦有客户需求,它就需要马上响应(如图5),并做出相应的处理,然后将结果返回给客户,客户显示服务器处理结果(如图10)。
图4 服务器监听8000端口
图5 服务器接受到请求并响应请求
服务器端程序代码如下:
try{
gameServer gServer = new gameServer();//创建一个主类实例
gServer.newServerSocket(gServer.port);//监听gServer.port端口
while(true)//时刻等待客户端连接。
{
gServer.con = gServer.server.accept();//一旦有客户的请求,则接收客户请求。
multiRequest cThread=new multiRequest(gServer.gSocket);//为处理客户端请求建立线程。
cThread.start();//启动线程处理客户端请求。
}
}catch(IOException e)//捕获异常。
{
System.out.println(“Creating socket error!!!”);
System.exit(1);
} |
以下为multiRequest类的部分代码:
class multiRequest extends Thread
{
private Socket rSocket;
private DataInputStream is;
private DataOutputStream os;
String strReceive=null;
String strWhichService=null;
Private intType;
public multiRequest(Socket s)throws IOException//构造函数
{
rSocket = s;
inType = 0;
is = new DataInputStream(rSocket.getInputStream());//建立输入输出流。
os = new DataOutputStream(rSocket.getOutputStream());
}
public void run()
{
try{
strReceive=in.readUTF();
strWhichService=strReceive.substring(0,2);
//分离出用户向服务器发送子串的前两个字符,这个字符标志着用户请求的服务种类。
if(strWhichService.equals(“/r”)) intType=1;//请求注册服务。
else if(strWhichService.equals(“/s”) intType=2;//请求查询分数服务。
else if(strWhichService.equals(“/5”) intType=3;//请求五子棋服务。
……//请求其它服务(略)
switch(intType)
{
case 1: newUser();break;
case 2: findByGradeByUserID();break;
case 3: playWuzi();break;
default 0:displayError();break;
}
}catch(IOException e){}
finally
{
try{
rSocket.close();
}catch(IOException e){}
}
}
…………//(略)
} |
由于手机端硬件的限制,所以,复杂的查找和处理都由配置较好服务器端处理。这样手机端可以减轻负担,专职处理界面的美观,以赢取客户的喜爱。例如,手机用户提出查分数请求时,手机向服务器发出请求“/s:user”。服务器接收到该子串,首先分离为“/s”和“user”,“/s”表示查询分数,“user”表示用户的ID。这时服务器端就调用findByGradeByUserID(),该函数利用JDBC连接数据库查询用户成绩,并将查询结果发送给客户端。
|