cocos2d-x網遊之java服務器篇1

               cocos2d-x網遊之java服務器篇

    cocos2d-x是c++開發與java通信要使用inputStream和outputStream進行交互

提供一個簡單的多線程服務器,有三個文件。

   

  1. /** 
  2.  * @(#)ServerTank.java 
  3.  * 
  4.  * 
  5.  * @author buger 
  6.  * @version 1.00 2012/8/30 
  7.  */ 
  8.  
  9.  
  10. import java.util.*; 
  11. import java.io.*; 
  12. import java.net.*; 
  13.  
  14. public class ServerTank 
  15.     public static void main(String args[]) 
  16.     { 
  17.         new ServerAgentThread().start(); 
  18.     } 

 

 

 

  1. /** 
  2.  * @(#)ServerThread.java 
  3.  * 
  4.  * 
  5.  * @author  buger 
  6.  * @version 1.00 2012/8/31 
  7.  */ 
  8.  
  9. //package wyf.jsc; 
  10.  
  11. import java.io.IOException; 
  12. import java.io.InputStream; 
  13. import java.io.OutputStream; 
  14. import java.net.ServerSocket; 
  15. import java.net.Socket; 
  16. import java.io.IOException; 
  17. import java.io.ByteArrayInputStream; 
  18. import java.io.ByteArrayOutputStream; 
  19. import javax.swing.*; 
  20. import javax.swing.event.*; 
  21. import java.awt.*; 
  22. import java.awt.event.*; 
  23. import java.util.*; 
  24. import java.io.*; 
  25. import java.net.*; 
  26. public class ServerThread extends Thread{ 
  27.     Socket sc; 
  28.     InputStream is; 
  29.     OutputStream os; 
  30.     boolean flag=true;//循環控制標誌位 
  31.     int id=0;//第幾玩家標誌位 0-初始 1-第一玩家 2-第二玩家 
  32.     ServerAgentThread father; 
  33.  
  34.     public ServerThread(ServerAgentThread father,Socket sc,int id) 
  35.     { 
  36.         this.father=father; 
  37.         this.sc=sc; 
  38.         this.id=id; 
  39.         try 
  40.         { 
  41.             is=sc.getInputStream(); 
  42.             os=sc.getOutputStream(); 
  43.         } 
  44.         catch(Exception e) 
  45.         { 
  46.             e.printStackTrace(); 
  47.         } 
  48.     } 
  49.     public void run() 
  50.     { 
  51.         while(flag) 
  52.         { 
  53.             try
  54.                 //System.out.println("Server Is Starting!---------------------\n"); 
  55.                 byte[] bytes = new byte[1024]; 
  56.                 int n = is.read(bytes); 
  57.                 String c_str=new String(bytes,0,n); 
  58.                 System.out.println("Server Is Starting!---------------------\n"); 
  59.                 System.out.println("Server Is Starting!*********************\n"); 
  60.                 if(c_str.startsWith("#ENTER_REQUEST#")) 
  61.                 {//請求進入遊戲 
  62.                     if(id<=2
  63.                     { 
  64.                         System.out.println("id="+id); 
  65.                         //允許進入 
  66.                         os.write(("<ALLOW_ENTER>").getBytes()); 
  67.                             //if() 
  68.                         father.userList[id-1]=this
  69.                         System.out.println("Player Loged In!---------------------------------\n"); 
  70.                         if(id==2
  71.                         {//向兩個用戶發遊戲開始消息 
  72.                             sendMsgTo2Users("<GAME_START>"); 
  73.                             //向用戶發Id消息 
  74.                             //sendMsgTo1User("<#YOU_ID#>1",1); 
  75.                             //sendMsgTo1User("<#YOU_ID#>2",2); 
  76.                         } 
  77.                     } 
  78.                     else 
  79.                     {//人數超,不讓進 
  80.                         os.write(("<USER_FULL>").getBytes()); 
  81.                         flag=false
  82.                         sc.close(); 
  83.                         //din.close(); 
  84.                         //dout.close(); 
  85.                     } 
  86.                 } 
  87.                 else if(c_str.startsWith("#Tank_Up#")) 
  88.                 { 
  89.                     os.write(("<Tank_Up>").getBytes()); 
  90.  
  91.                     System.out.println("Tank_Up---------------------\n"); 
  92.                 } 
  93.                 else if(c_str.startsWith("#Tank_Down#")) 
  94.                 { 
  95.                     os.write(("<Tank_Down>").getBytes()); 
  96.  
  97.                     System.out.println("Tank_Down--------------------\n"); 
  98.                 } 
  99.                 else if(c_str.startsWith("#Tank_Left#")) 
  100.                 { 
  101.                     os.write(("<Tank_Left>").getBytes()); 
  102.  
  103.                     System.out.println("Tank_Left---------------------\n"); 
  104.                 } 
  105.                 else if(c_str.startsWith("#Tank_Right#")) 
  106.                 { 
  107.                     os.write(("<Tank_Right>").getBytes()); 
  108.  
  109.                     System.out.println("Tank_Right---------------------\n"); 
  110.                 } 
  111.                 else if(c_str.startsWith("#Send_Fire#")) 
  112.                 { 
  113.                     System.out.println("Send_Fire----------------------\n"); 
  114.                 } 
  115.  
  116.  
  117.                 } 
  118.                 catch(Exception e) 
  119.                 { 
  120.  
  121.                     System.out.println("有人掉線了"); 
  122.                     try 
  123.                     { 
  124.  
  125.                         //sendMsgTo1User("<#ALLOW_EXIT#>",2); 
  126.                     } 
  127.                     catch(Exception ea) 
  128.                     { 
  129.  
  130.                         ea.printStackTrace(); 
  131.                     } 
  132.                     try 
  133.                     { 
  134.                          //sendMsgTo1User("<#ALLOW_EXIT#>",1); 
  135.                     } 
  136.                     catch(Exception ea) 
  137.                     { 
  138.                          ea.printStackTrace(); 
  139.                     } 
  140.                     father.initState(); 
  141.                     break
  142.             } 
  143.         } 
  144.     } 
  145.  
  146.  
  147.  
  148.     //向兩個玩家發同樣的消息 
  149.     public void sendMsgTo2Users(String msg) throws Exception 
  150.     { 
  151.         System.out.println("給兩個玩家發消息"+msg); 
  152.         for(ServerThread sat:father.userList) 
  153.         { 
  154.             sat.os.write((msg).getBytes()); 
  155.         } 
  156.     } 
  157.  
  158.     //向指定ID玩家發送消息 
  159.     public void sendMsgTo1User(String msg,int id) throws Exception 
  160.     { 
  161.         father.userList[id-1].os.write((msg).getBytes()); 
  162.     } 
  163.  
  164.  

這是基於我的一個遊戲的部分。

 

  1. /** 
  2.  * @(#)ServerAgentThread.java 
  3.  * 
  4.  * 
  5.  * @author buger 
  6.  * @version 1.00 2012/8/31 
  7.  */ 
  8. //package wyf.jsc; 
  9. import java.sql.*; 
  10. import javax.swing.*; 
  11. import javax.swing.event.*; 
  12. import java.awt.*; 
  13. import java.awt.event.*; 
  14. import java.util.*; 
  15. import java.io.*; 
  16. import java.net.*; 
  17. public class ServerAgentThread extends Thread 
  18.  
  19.     /** 
  20.      * Creates a new instance of <code>ServerAgentThread</code>. 
  21.      */ 
  22.     ServerSocket ss; 
  23.     boolean flag=true;//循環控制標誌位 
  24.     int ucount=0;//玩家數量 0-沒有 1-1個玩家 2-兩個玩家 
  25.     ServerThread[] userList=new ServerThread[2]; 
  26.     int hitId=0;//0無用戶 1-1號用戶 2-2號用戶 
  27.  
  28.     public ServerAgentThread() { 
  29.         try 
  30.         { 
  31.             ss=new ServerSocket(5000); 
  32.             System.out.println("Server 1.0 CopyRight(c)All Rights Reserved Playerobe Studios!"); 
  33.             System.out.println("TankServer服務器以啓動"); 
  34.             System.out.println("正在監聽在5555端口....."); 
  35.         }catch(Exception e) 
  36.         { 
  37.             e.printStackTrace(); 
  38.         } 
  39.     } 
  40.  
  41.     /** 
  42.      * @param args the command line arguments 
  43.      */ 
  44.      public void initState()//服務器回初始狀態 
  45.      { 
  46.         ucount=0;//玩家數量 0-沒有 1-1個玩家 2-兩個玩家 
  47.         userList=new ServerThread[2]; 
  48.         hitId=0;//0無用戶 1-1號用戶 2-2號用戶 
  49.      } 
  50.  
  51.     public static void main(String[] args) { 
  52.         // TODO code application logic here 
  53.         new ServerAgentThread().start(); 
  54.     } 
  55.  
  56.    public void run() 
  57.     { 
  58.         while(flag) 
  59.         { 
  60.             try 
  61.             { 
  62.                 Socket sc=ss.accept(); 
  63.  
  64.                 //接到一個用戶的連接請求 
  65.                 System.out.println("接到一個用戶的連接請求 "+sc.getInetAddress().toString()); 
  66.                 ucount++; 
  67.                 ServerThread sat=new ServerThread(this,sc,ucount); 
  68.                 sat.start(); 
  69.             }catch(Exception e) 
  70.             { 
  71.                 e.printStackTrace(); 
  72.             } 
  73.         } 
  74.     } 
  75.  
  76.  

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章