如何用Java實現網絡中國象棋室(一)
導讀:
Java語言的簡潔和完美,以及java網絡功能的優越性是每個java體驗者所體會的感受。筆者在閒暇之餘,開發出網絡中國象棋(以下簡稱象棋)程序,在此願與廣大java編程愛好者共享,做以介紹供大家參考。如有問題可與我聯繫:
網絡象棋程序主要功能有象棋室(多象棋桌)功能、觀棋功能、悔棋功能、下棋聊天功能、調取殘局文件對弈功能、方便的人性化圖形界面操作等功能。由象棋服務和客戶端Applet組成,Applet實現象棋室的顯示,象棋桌的顯示和走步判斷以及用戶的一些操作如悔棋、認輸等功能的實現。爲考慮資源使用情況和界面美觀,象棋桌採用使用高效和優化的雙緩衝圖形界面處理技術,使用戶操作更舒適,更方便。以下依次詳細介紹象棋服務和客戶端的實現過程。
首先介紹象棋服務,它是運行在服務器端的用於處理和轉發用戶登錄到象棋室,進入離開遊戲桌,走棋,悔棋,認輸,退出等等應用。
1、登錄處理:
//////////////////定義登錄連接處理類
package sunstudio.chess.event;
import java.util.*;
import java.net.*;
import java.io.*;
import sunstudio.util.*;
import sunstudio.*;
public class ChessLogin implements Runnable{
ServerSocket ss=null;
boolean isrunning=true;
Vector listeners=new Vector();
int guestid=0;
public ChessLogin(ChessServer s){
ss=s.ss;
addLoginListener(s);
new Thread(this).start();
}
public void run(){
while(isrunning){
try{
Socket socket=ss.accept();
String un=chkLogin(socket.getInputStream());
if(un!=null)notifyListener(guestid++,un,socket);
}catch(IOException e){}
}
}
public void addLoginListener(LoginListener l){
listeners.addElement(l);
}
void notifyListener(int userid,String username,Socket sock){
LoginEvent evt=new LoginEvent(userid,username,sock);
for(Enumeration enu=listeners.elements();enu.hasMoreElements();){
((LoginListener)enu.nextElement()).onLoginEvent(evt);
}
}
public String chkLogin(InputStream is)throws IOException{
byte[] head=new byte[12];
HttpInputStream.readBytes(is,12,head);
int cmdtype=head[0];
int totalsize=Convert.byteToShort(head[1],head[2]);
if(totalsize==0)return null;
byte[] data=new byte[totalsize];
HttpInputStream.readBytes(is,totalsize,data);
//System.out.print("type="+cmdtype+",totalsize="+totalsize+",username="+parseLoginData(data));
return parseLoginData(data);
}
public String parseLoginData(byte[] d){
return new String(d);
}
public static int byteToInt(byte j,byte k,byte m,byte n){
int a =j&0xff;
int b =k&0xff;
int c =m&0xff;
int d =n&0xff;
return (d<<24|c<<16|b<<8|a);
}
}
//////////////////定義登錄連接事件類
package sunstudio.chess.event;
import java.net.*;
public class LoginEvent{
public int userID;
public String username;
public Socket socket;
public LoginEvent(int userID,String username,Socket sock){
this.userID=userID;
this.username=username;
this.socket=sock;
}
}
//////////////////登錄監聽接口
package sunstudio.chess.event;
public interface LoginListener{
public void onLoginEvent(LoginEvent evt);
}
(待續......)
Java語言的簡潔和完美,以及java網絡功能的優越性是每個java體驗者所體會的感受。筆者在閒暇之餘,開發出網絡中國象棋(以下簡稱象棋)程序,在此願與廣大java編程愛好者共享,做以介紹供大家參考。如有問題可與我聯繫:網絡象棋程序主要功能有象棋室(多象棋桌)功能、觀棋功能、悔棋功能、下棋聊天功能、調取殘局文件對弈功能、方便的人性化圖形界面操作等功能。由象棋服務和客戶端Applet組成,Applet實現象棋室的顯示,象棋桌的顯示和走步判斷以及用戶的一些操作如悔棋、認輸等功能的實現。爲考慮資源使用情況和界面美觀,象棋桌採用使用高效和優化的雙緩衝圖形界面處理技術,使用戶操作更舒適,更方便。以下依次詳細介紹象棋服務和客戶端的實現過程。 首先介紹象棋服務,它是運行在服務器端的用於處理和轉發用戶登錄到象棋室,進入離開遊戲桌,走棋,悔棋,認輸,退出等等應用。 1、登錄處理://////////////////定義登錄連接處理類 package sunstudio.chess.event; import java.util.*; import java.net.*; import java.io.*; import sunstudio.util.*; import sunstudio.*; public class ChessLogin implements Runnable{ ServerSocket ss=null; boolean isrunning=true; Vector listeners=new Vector(); int guestid=0; public ChessLogin(ChessServer s){ ss=s.ss; addLoginListener(s); new Thread(this).start(); } public void run(){ while(isrunning){ try{ Socket socket=ss.accept(); String un=chkLogin(socket.getInputStream()); if(un!=null)notifyListener(guestid++,un,socket); }catch(IOException e){} } } public void addLoginListener(LoginListener l){ listeners.addElement(l); } void notifyListener(int userid,String username,Socket sock){ LoginEvent evt=new LoginEvent(userid,username,sock); for(Enumeration enu=listeners.elements();enu.hasMoreElements();){ ((LoginListener)enu.nextElement()).onLoginEvent(evt); } } public String chkLogin(InputStream is)throws IOException{ byte[] head=new byte[12]; HttpInputStream.readBytes(is,12,head); int cmdtype=head[0]; int totalsize=Convert.byteToShort(head[1],head[2]); if(totalsize==0)return null; byte[] data=new byte[totalsize]; HttpInputStream.readBytes(is,totalsize,data); //System.out.print("type="+cmdtype+",totalsize="+totalsize+",username="+parseLoginData(data)); return parseLoginData(data); } public String parseLoginData(byte[] d){ return new String(d); } public static int byteToInt(byte j,byte k,byte m,byte n){ int a =j&0xff; int b =k&0xff; int c =m&0xff; int d =n&0xff; return (d<<24|c<<16|b<<8|a); }}//////////////////定義登錄連接事件類 package sunstudio.chess.event; import java.net.*; public class LoginEvent{ public int userID; public String username; public Socket socket; public LoginEvent(int userID,String username,Socket sock){ this.userID=userID; this.username=username; this.socket=sock; }}//////////////////登錄監聽接口 package sunstudio.chess.event; public interface LoginListener{ public void onLoginEvent(LoginEvent evt);}(待續......)
本文轉自
http://www.cn-java.com/www1/?action-viewnews-itemid-1840
Java語言的簡潔和完美,以及java網絡功能的優越性是每個java體驗者所體會的感受。筆者在閒暇之餘,開發出網絡中國象棋(以下簡稱象棋)程序,在此願與廣大java編程愛好者共享,做以介紹供大家參考。如有問題可與我聯繫:
網絡象棋程序主要功能有象棋室(多象棋桌)功能、觀棋功能、悔棋功能、下棋聊天功能、調取殘局文件對弈功能、方便的人性化圖形界面操作等功能。由象棋服務和客戶端Applet組成,Applet實現象棋室的顯示,象棋桌的顯示和走步判斷以及用戶的一些操作如悔棋、認輸等功能的實現。爲考慮資源使用情況和界面美觀,象棋桌採用使用高效和優化的雙緩衝圖形界面處理技術,使用戶操作更舒適,更方便。以下依次詳細介紹象棋服務和客戶端的實現過程。
首先介紹象棋服務,它是運行在服務器端的用於處理和轉發用戶登錄到象棋室,進入離開遊戲桌,走棋,悔棋,認輸,退出等等應用。
1、登錄處理:
//////////////////定義登錄連接處理類
package sunstudio.chess.event;
import java.util.*;
import java.net.*;
import java.io.*;
import sunstudio.util.*;
import sunstudio.*;
public class ChessLogin implements Runnable{
ServerSocket ss=null;
boolean isrunning=true;
Vector listeners=new Vector();
int guestid=0;
public ChessLogin(ChessServer s){
ss=s.ss;
addLoginListener(s);
new Thread(this).start();
}
public void run(){
while(isrunning){
try{
Socket socket=ss.accept();
String un=chkLogin(socket.getInputStream());
if(un!=null)notifyListener(guestid++,un,socket);
}catch(IOException e){}
}
}
public void addLoginListener(LoginListener l){
listeners.addElement(l);
}
void notifyListener(int userid,String username,Socket sock){
LoginEvent evt=new LoginEvent(userid,username,sock);
for(Enumeration enu=listeners.elements();enu.hasMoreElements();){
((LoginListener)enu.nextElement()).onLoginEvent(evt);
}
}
public String chkLogin(InputStream is)throws IOException{
byte[] head=new byte[12];
HttpInputStream.readBytes(is,12,head);
int cmdtype=head[0];
int totalsize=Convert.byteToShort(head[1],head[2]);
if(totalsize==0)return null;
byte[] data=new byte[totalsize];
HttpInputStream.readBytes(is,totalsize,data);
//System.out.print("type="+cmdtype+",totalsize="+totalsize+",username="+parseLoginData(data));
return parseLoginData(data);
}
public String parseLoginData(byte[] d){
return new String(d);
}
public static int byteToInt(byte j,byte k,byte m,byte n){
int a =j&0xff;
int b =k&0xff;
int c =m&0xff;
int d =n&0xff;
return (d<<24|c<<16|b<<8|a);
}
}
//////////////////定義登錄連接事件類
package sunstudio.chess.event;
import java.net.*;
public class LoginEvent{
public int userID;
public String username;
public Socket socket;
public LoginEvent(int userID,String username,Socket sock){
this.userID=userID;
this.username=username;
this.socket=sock;
}
}
//////////////////登錄監聽接口
package sunstudio.chess.event;
public interface LoginListener{
public void onLoginEvent(LoginEvent evt);
}
(待續......)
Java語言的簡潔和完美,以及java網絡功能的優越性是每個java體驗者所體會的感受。筆者在閒暇之餘,開發出網絡中國象棋(以下簡稱象棋)程序,在此願與廣大java編程愛好者共享,做以介紹供大家參考。如有問題可與我聯繫:網絡象棋程序主要功能有象棋室(多象棋桌)功能、觀棋功能、悔棋功能、下棋聊天功能、調取殘局文件對弈功能、方便的人性化圖形界面操作等功能。由象棋服務和客戶端Applet組成,Applet實現象棋室的顯示,象棋桌的顯示和走步判斷以及用戶的一些操作如悔棋、認輸等功能的實現。爲考慮資源使用情況和界面美觀,象棋桌採用使用高效和優化的雙緩衝圖形界面處理技術,使用戶操作更舒適,更方便。以下依次詳細介紹象棋服務和客戶端的實現過程。 首先介紹象棋服務,它是運行在服務器端的用於處理和轉發用戶登錄到象棋室,進入離開遊戲桌,走棋,悔棋,認輸,退出等等應用。 1、登錄處理://////////////////定義登錄連接處理類 package sunstudio.chess.event; import java.util.*; import java.net.*; import java.io.*; import sunstudio.util.*; import sunstudio.*; public class ChessLogin implements Runnable{ ServerSocket ss=null; boolean isrunning=true; Vector listeners=new Vector(); int guestid=0; public ChessLogin(ChessServer s){ ss=s.ss; addLoginListener(s); new Thread(this).start(); } public void run(){ while(isrunning){ try{ Socket socket=ss.accept(); String un=chkLogin(socket.getInputStream()); if(un!=null)notifyListener(guestid++,un,socket); }catch(IOException e){} } } public void addLoginListener(LoginListener l){ listeners.addElement(l); } void notifyListener(int userid,String username,Socket sock){ LoginEvent evt=new LoginEvent(userid,username,sock); for(Enumeration enu=listeners.elements();enu.hasMoreElements();){ ((LoginListener)enu.nextElement()).onLoginEvent(evt); } } public String chkLogin(InputStream is)throws IOException{ byte[] head=new byte[12]; HttpInputStream.readBytes(is,12,head); int cmdtype=head[0]; int totalsize=Convert.byteToShort(head[1],head[2]); if(totalsize==0)return null; byte[] data=new byte[totalsize]; HttpInputStream.readBytes(is,totalsize,data); //System.out.print("type="+cmdtype+",totalsize="+totalsize+",username="+parseLoginData(data)); return parseLoginData(data); } public String parseLoginData(byte[] d){ return new String(d); } public static int byteToInt(byte j,byte k,byte m,byte n){ int a =j&0xff; int b =k&0xff; int c =m&0xff; int d =n&0xff; return (d<<24|c<<16|b<<8|a); }}//////////////////定義登錄連接事件類 package sunstudio.chess.event; import java.net.*; public class LoginEvent{ public int userID; public String username; public Socket socket; public LoginEvent(int userID,String username,Socket sock){ this.userID=userID; this.username=username; this.socket=sock; }}//////////////////登錄監聽接口 package sunstudio.chess.event; public interface LoginListener{ public void onLoginEvent(LoginEvent evt);}(待續......)
本文轉自
http://www.cn-java.com/www1/?action-viewnews-itemid-1840
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.