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

该博客展示了Java编写的游戏服务器相关代码,包含ReadThread和MyServer两个类。ReadThread类用于读取客户机指令,MyServer类扩充自Thread,负责监听接收和发送数据的端口,处理客户机连接,实现数据的读写和服务器的关闭等操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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=new InputStreamReader(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 <a href="../net/Net.html">Net</a>

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

 */

public class MyServer extends Thread{

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

  private final int RECEIVE_IN_PORT=9090;

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

  private final int RECEIVE_OUT_PORT=9091;

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

  private PrintWriter m_printWriter;

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

  private ServerSocket m_rInServer;

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

  private ServerSocket m_rOutServer;

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

  private Net m_Owner;

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

  private ReadThread readThread=null;

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

  private boolean bConnDone=false;

  /**创建成功标志*/

  private boolean bServerDone=true;

  /**

   * MyServer的构造器

   * @param netRead 网络接口NetRead

   */

  public MyServer(Net netRead)

  {

    m_Owner=netRead;

    try {

      m_rInServer = new ServerSocket(RECEIVE_IN_PORT);

      m_rOutServer = new ServerSocket(RECEIVE_OUT_PORT);

    }

    catch (IOException e)

    {

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

    }

  }

  /**

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

   * @see readThread#start()

   */

  public void run()

  {

   // try{

      while(!bConnDone){

        try{

          Socket socketIn = m_rInServer.accept();

          Socket socketOut = 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 void readStr(String str)

 {

       m_Owner.readStr(str);

 }

 /**

  * 向对方发送数据

  * @param str 要发送东西

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

  */

 public boolean writeStr(String str)

 {

   if(m_printWriter==null)return false;

   try

   {

       m_printWriter.println(str);

       return true;

   }

   catch(Exception e)

   {

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

     return false;

   }

 

 }

 /**

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

  */

 public void close()

 {

   try{

       readThread.stop();

       readThread=null;

       m_printWriter.close();

       m_rOutServer.close();

       m_rInServer.close();

   }catch(Exception e){}

 }

 /**

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

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

  */

 public boolean getbConnDone()

 {

   return bConnDone;

 }

 /**

  * 设置有没有机器连接

  * @param bool true就时有连接

  */

 public void setConnDone(boolean bool)

 {

   bConnDone=bool;

 }

 /**

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

  * @return

  */

 public boolean getServerDone()

 {

   return this.bServerDone;

 }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值