游戏代码部分-------server包

来源:互联网 发布:ios旧版手机淘宝 编辑:程序博客网 时间:2024/05/21 10:33

package server;
/**
serverThread*/
import java.io.*;
import java.net.*;
/**
 *
服务器端的ReadRhread
 * @see clientRequest
 */

public class ReadThread extends Thread{
  /**
用户连接的通信套接字*/
  private Socket clientRequest;
  /**
输入流*/
  private BufferedReader input;
  /**
读进来的数*/
  private String m_sReadIn="";
  /**
服务器*/
  private MyServer m_myServer;
  /**
线程结束的标志*/
  private boolean done=false;
  /**
   *
服务器端的ReadRhread的构造器
   * @param s
9090端口上监听读的套接字
   * @param ms
服务器MyServer
   * @see
   */
  public ReadThread(Socket s,MyServer ms)
  {
    /**
接收客户端传来的套接字*/
    this.clientRequest=s;
    /**
服务器*/
    this.m_myServer=ms;
    /**
字符流*/
    InputStreamReader reader;
    try{
      /**
初始化输入、输出流*/
      reader=newInputStreamReader(clientRequest.getInputStream());
      input=new BufferedReader(reader);
    }
    catch(IOException e){
      System.out.println(e.getMessage());
    }
  }
  /**
  *
线程的执行方法读取客户机指令
  * @see input.readLine()
  * @see m_myServer.readStr(m_sReadIn)
  */
 public void run()
 {

   while(!done && m_myServer!=null)
   {
     try{
       /**
接收客户机指令*/
       m_sReadIn=input.readLine();
       m_myServer.readStr(m_sReadIn);
     }
     catch(IOException e){
      System.out.println(e.getMessage());
     }
   }
   try
   {
     input.close() ;
     clientRequest.close();
   }
   catch(IOException e){ }
 }
 /**
  *
结束线程
  */
 public void close()
{
  done = false;
}

}

package server;

 

import java.io.*;

import java.util.*;

import java.net.*;

import net.*;

/**

 * MyServer扩充Thread

 * @see <ahref="../net/Net.html">Net</a>

 * @see <ahref="ReadThread.html">ReadThread</a>

 */

public class MyServer extends Thread{

/**接收数据的端口*/

  private finalint RECEIVE_IN_PORT=9090;

  /**发送数据的端口*/

  private finalint RECEIVE_OUT_PORT=9091;

  /**向总控台写数据的流*/

  privatePrintWriter m_printWriter;

  /**服务器端监听接收数据的套接字*/

  privateServerSocket m_rInServer;

  /**服务器端监听发送数据的套接字*/

  privateServerSocket m_rOutServer;

  /**依赖的网络接口*/

  private Netm_Owner;

  /**读数据流的线程*/

  privateReadThread readThread=null;

  /**连接客户机成功失败有标志*/

  privateboolean bConnDone=false;

  /**创建成功标志*/

  privateboolean bServerDone=true;

  /**

   * MyServer的构造器

   * @paramnetRead 网络接口NetRead

   */

  publicMyServer(Net netRead)

  {

   m_Owner=netRead;

    try {

     m_rInServer = new ServerSocket(RECEIVE_IN_PORT);

     m_rOutServer = new ServerSocket(RECEIVE_OUT_PORT);

    }

    catch (IOExceptione)

    {

     System.out.println(e.getMessage());

    }

  }

  /**

   * 重写Threadrun()方法,MyServer线程的入口点

   * @seereadThread#start()

   */

  public voidrun()

  {

   // try{

     while(!bConnDone){

        try{

          SocketsocketIn = m_rInServer.accept();

          SocketsocketOut = m_rOutServer.accept();

         readThread = new ReadThread(socketIn, this);

         readThread.start();

          /**文本流——>字符流*/

         OutputStreamWriter writer = new OutputStreamWriter(socketOut.getOutputStream());

         m_printWriter = new PrintWriter(writer, true);

         m_Owner.showMessage("对手:"+socketIn.getInetAddress()+"加入游戏");

         bConnDone=true;

       }catch(Exception e)

        {

         bConnDone=true;

         bServerDone=false;

         m_Owner.setNetStatus(Net.NOCONNECT);

         m_Owner.showMessage("创建服务器失败!");

        }

      }

   //}catch(IOException e){

     //System.out.println(e.getMessage());

    //}

  }

  /**

  * 当数据来的时候调用,接口上的读数据,

  * @param str 读进来的数据

  */

 protected voidreadStr(String str)

 {

      m_Owner.readStr(str);

 }

 /**

  * 向对方发送数据

  * @param str 要发送东西

  * @return 若写成功,则返回真

  */

 public booleanwriteStr(String str)

 {

  if(m_printWriter==null)return false;

   try

   {

      m_printWriter.println(str);

       returntrue;

   }

  catch(Exception e)

   {

    m_Owner.showMessage(str+"发送失败!");

     returnfalse;

   }

 

 }

 /**

  * 关闭套接字和输入流,终止主机对象MyServer线程

  */

 public voidclose()

 {

   try{

      readThread.stop();

      readThread=null;

      m_printWriter.close();

      m_rOutServer.close();

      m_rInServer.close();

  }catch(Exception e){}

 }

 /**

  * 返回有没有机器连接成功

  * @return 已经有机器连接上服务器 返回true

  */

 public booleangetbConnDone()

 {

   returnbConnDone;

 }

 /**

  * 设置有没有机器连接

  * @param booltrue就时有连接

  */

 public voidsetConnDone(boolean bool)

 {

  bConnDone=bool;

 }

 /**

  * 返回创建服务器成功标志

  * @return

  */

 public booleangetServerDone()

 {

   returnthis.bServerDone;

 }

}