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

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

package client;

import java.net.*;

import java.io.*;

import net.*;

/**

 * 用于连接MyServer

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

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

 */

public class MyClient {

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

  private finalint RECEIVE_OUT_PORT=9090;

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

  private finalint RECEIVE_IN_PORT=9091;

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

  privatePrintWriter m_printWriter;

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

  private Netm_Owner;

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

  privateReadThread readThread=null;

  /**用于通信的套接字*/

  private SocketsocketIn,socketOut;

  /**连接成功失败的标志*/

  private  boolean m_connectFlag=false;

  /**

   * MyClient的构造器

   * @param str 要连接的MyServerIP地址

   * @paramnetRead 依赖的网络接口

   */

  publicMyClient(String str, Net netRead)

  {

    m_Owner =netRead;

    try

    {

      socketOut= new Socket(str, RECEIVE_OUT_PORT);

      socketIn =new Socket(str, RECEIVE_IN_PORT);

      readThread= new ReadThread(socketIn, this); //实例readThread

     readThread.start(); //启动readThread线程

     OutputStreamWriter writer = new OutputStreamWriter(socketOut.

         getOutputStream());

     m_printWriter = new PrintWriter(writer, true);

     m_connectFlag = true;

    }

    catch(Exception e)

    {

     m_Owner.showMessage("连接" + str + "失败");

      m_connectFlag= false;

    }

  }

  /**

   *  当数据来的时候调用

   * @param str 读进来的数据

   */

  protected voidreadStr(String str)

  {

   System.out.println(str);

   m_Owner.readStr(str);

  }

  /**

   * 往对方写东西

   * @param str 要写的东西

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

   * @seem_printWriter

   */

  public booleanwriteStr(String str)

  {

    if(m_printWriter == null)

      returnfalse;

    try

    {

     m_printWriter.println(str);

    }

    catch(Exception e)

    {

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

      returnfalse;

    }

    return true;

  }

  /**

   * 关闭MyClient

   * @seereadThread#stop()

   */

  public voidclose()

  {

    try

    {

    readThread.stop();

     readThread= null;

    m_printWriter.close();

      socketOut.close();

     socketIn.close();

    }

    catch(Exception e) {}

  }

  /**获取连接成功失败的标志*/

  public booleangetConnectFlag()

  {

    returnm_connectFlag;

  }

}

package client;

import java.io.*;

import java.net.*;

/**

 *客户机端从套接字读数据

 */

public class ReadThread  extends Thread

{

  /**用户连接的通信套接字*/

  private SocketclientRequest;

  /**输入流*/

  privateBufferedReader input;

  /**读进来的数*/

  private Stringm_sReadIn = "";

  /**客户机*/

  privateMyClient m_myClient;

  /**线程结束标志*/

  privateboolean done = false;

  /**

   * 客户机端的ReadThread的构造器

   * @param s 套接字

   * @param mc 客户机

   */

  publicReadThread(Socket s, MyClient mc) {

    /**接收receiveServer传来的套接字*/

   this.clientRequest = s;

   this.m_myClient = mc;

    /**字符流*/

   InputStreamReader reader;

    try {

      /**初始化输入、输出流*/

      reader =new InputStreamReader(clientRequest.getInputStream());

      input =new BufferedReader(reader);

    }

    catch(IOException e) {

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

    }

  }

 

  /**

   * 线程的执行方法

   */

  public voidrun()

  {

    while(!done)

    {

      try

      {

       m_sReadIn = input.readLine();

       m_myClient.readStr(m_sReadIn);

       //System.out.println(m_sReadIn); //接收客户机指令

      }

      catch(IOException e)

      {

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

      }

    }

    try

    {

     input.close() ;

     clientRequest.close(); //关闭套接字

    }

    catch(IOException e) {  }

  } //end of run

  /**

   * 结束线程

   */

  public voidclose()

  {

    done =false;

  }

}


原创粉丝点击