⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 portcontrol.java

📁 利用JAVA采用网络通讯的例子,支持weblogic及websphere
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
package collector.communication;

import java.io.*;
import java.net.*;

/**
 * <p>Title: MoxaAspp.PortControl</p>
 * <p>Description: Java implementation of Moxa CN2500 Aspp library.
 *                 Use a object of this class to set Moxa CN2500
 *                 port configuration before transport data via it.</p>
 * <p>Copyright: Nari Pbs2000j (c) 2004</p>
 * <p>Company: Nari</p>
 * @author Weili
 * @version 1.0
 */

public class PortControl {
  //Attributes of Moxa server.
  /** addr of MoxaCN2500 Server.*/
  public String IPofMoxa;
  /**(1-16)Port number of Moxa CN2500 Async Server.*/
  public short PortofMoxa;

  //Command port socket for specified physical port.
  /** Command port number of specified port. */
  public short CmdPortofMoxa;
  /** Socket of command port number for specified port. */
  public Socket CmdSocketToMoxa;
  public InputStream CmdPortReader;
  public OutputStream CmdPortWriter;
  //Data port socket for the same physical port.
  public short DataPortofMoxa;
  public Socket DataSocketToMoxa;
  public InputStream DataPortReader;
  public OutputStream DataPortWriter;

  public PortControl(String IP, short Port) {
    IPofMoxa = IP;
    PortofMoxa = Port;
    CmdPortofMoxa = 0;
    DataPortofMoxa = 0;
    Socket CmdSocketToMoxa = null;
    BufferedReader CmdPortReader = null;
    PrintWriter CmdPortWriter = null;
    Socket DataSocketToMoxa = null;
    BufferedReader DataPortReader = null;
    PrintWriter DataPortWriter = null;
  }

  /**
   * Create a socket for command port and prepare for io operation.
   * Note: command port is used for control purpose,
   * e.g. set async port baud rate, read its line status...
   *
   * @param IP IP address of Moxa CN2500 Async Server.
   * @param Port Port number from 1 to maximum ports of a Moxa CN2500 Async
   * server.
   *
       * @return Socket object if connection to comamnd port established successfully,
   * otherwise null.
   */
  public Socket OpenCmdPort(String IP, short Port) {
    if (Port < 1 || Port > PortControlOptions.CN2000_MAXPORT) {
      //System.out.println("Invalid port number.");
      //System.out.println("Port number between 1 and 16 required.");
      return null;
    }

    //System.out.println();
    //System.out.println("Open command port " + IPofMoxa + ":" + PortofMoxa + " ... ...");

    Socket SocketMoxa = null;
    CmdPortofMoxa = (short) (PortControlOptions.D_START_CMDPORT + Port - 1);

    try {
      SocketMoxa = new Socket(IP, CmdPortofMoxa);
    }
    catch (UnknownHostException uhe) {
      System.out.println("Moxa port control - Open command port error: " +
                         "unknown host \"" + IP + "\".");
      System.out.println(uhe.getMessage());
    }
    catch (IOException ioe) {
      System.out.println("Moxa port control - Open command port error: " +
                         "io error occured.");
      System.out.println(ioe.getMessage());
    }

    if (SocketMoxa != null) {
      CmdSocketToMoxa = SocketMoxa;
      IPofMoxa = IP;
      PortofMoxa = Port;

      try {
        CmdPortReader = CmdSocketToMoxa.getInputStream();
        CmdPortWriter = CmdSocketToMoxa.getOutputStream();
      }
      catch (IOException ioe) {
        System.out.println(
            "Moxa port control - IO preparation for command socket error: " +
            "io error occured.");
        System.out.println(ioe.getMessage());
      }

      if (CmdPortReader != null && CmdPortWriter != null) {
        return CmdSocketToMoxa;
      }
      else {
        CmdPortReader = null;
        CmdPortWriter = null;
        ClosePort(CmdSocketToMoxa);
        return null;
      }
    }

    return CmdSocketToMoxa;
  } //End of OpenCmdPort.

  /**
   * Create a socket for data port and prepare for io operation.
   * Note: data port is used for data transfer purpose,
   * e.g. writing and reading data from this port.
   *
   * @param IP IP address of Moxa CN2500 Async Server.
   * @param Port Port number from 1 to maximum ports of a Moxa CN2500 Async
   * server.
   *
   * @return Socket object if connection to data port established successfully,
   * otherwise null.
   */
  public Socket OpenDataPort(String IP, short Port) {
    if (Port < 1 || Port > PortControlOptions.CN2000_MAXPORT) {
      //System.out.println("Invalid port number.");
      //System.out.println("Port number between 1 and 16 required.");
      return null;
    }

    //System.out.println();
    //System.out.println("Open data port " + IPofMoxa + ":" + PortofMoxa + " ... ...");

    Socket SocketMoxa = null;
    DataPortofMoxa = (short) (PortControlOptions.D_START_DATAPORT + Port - 1);

    try {
      SocketMoxa = new Socket(IP, DataPortofMoxa);
    }
    catch (UnknownHostException uhe) {
      System.out.println("Moxa port control - Open data port error: " +
                         "unknown host \"" + IP + "\".");
      System.out.println(uhe.getMessage());
    }
    catch (IOException ioe) {
      System.out.println("Moxa port control - Open data port error: " +
                         "io error occured.");
      System.out.println(ioe.getMessage());
    }

    if (SocketMoxa != null) {
      DataSocketToMoxa = SocketMoxa;
      IPofMoxa = IP;
      PortofMoxa = Port;

      try {
        DataPortReader = DataSocketToMoxa.getInputStream();
        DataPortWriter = DataSocketToMoxa.getOutputStream();
      }
      catch (IOException ioe) {
        System.out.println(
            "Moxa port control - IO preparation for data socket error: " +
            "io error occured.");
        System.out.println(ioe.getMessage());
      }

      if (DataPortReader != null && DataPortWriter != null) {
        return DataSocketToMoxa;
      }
      else {
        DataPortReader = null;
        DataPortWriter = null;
        ClosePort(DataSocketToMoxa);
        return null;
      }
    }

    return DataSocketToMoxa;
  } //End of OpenDataPort.

  /**
   * Close a socket connected to a port of Moxa CN2500 Async Server.
   *
   * @param SocketMoxa The socket needed to be closed.
   */
  public void ClosePort(Socket SocketMoxa) {
    //System.out.println();
    //System.out.println("Close port " + IPofMoxa + ":" + PortofMoxa + " ... ...");
    try {
      SocketMoxa.close();
    }
    catch (IOException ioe) {
      System.out.println("Moxa port control - Close port error: " +
                         "io error occured.");
      System.out.println(ioe.getMessage());
    }

    if (CmdSocketToMoxa != null) {
      CmdSocketToMoxa = null;
    }
  }

  /**
   * Reset a port represented by class member "CmdSocketToMoxa".
   *
   * @return 0 if successful ,otherwise -1.
   */
  public short ResetPort() {
    //System.out.println();
    //System.out.println("Reset port " + IPofMoxa + ":" + PortofMoxa + " ... ...");
    byte[] CmdContent = new byte[8];
    CmdContent[0] = PortControlOptions.D_COMMAND_PORT_RESET;
    CmdContent[1] = 3;
    CmdContent[2] = 0x31; //1
    CmdContent[3] = 0x36; //6
    CmdContent[4] = 0x61; //a

    try {
      CmdPortWriter.write(CmdContent, 0, 5);
    }
    catch (IOException ioe) {
      System.out.println("Moxa port control - Reset port error: " +
                         "io error occured.");
      System.out.println(ioe.toString());
    }

    return WaitCmdResult(PortControlOptions.D_COMMAND_PORT_RESET);
  }

  /**
   * Set Async port baud rate and character mode.
   *
   * @param baud baud rate defined in class PortCOntrolOptions.
       * @param mode character mode such as stop bits, data bits, parity mode defined
   * in class PortControlOptions.
   *
   * @return 0 if successful ,otherwise -1.
   */
  public short ioctl(byte baud, byte mode) {
    //System.out.println();
    //System.out.println("Set ioctrl of port " + IPofMoxa + ":" + PortofMoxa +
    //" with baud " + baud + " and mode " + mode + " ... ...");
    byte[] CmdContent = new byte[8];
    CmdContent[0] = PortControlOptions.D_COMMAND_IOCTL;
    CmdContent[1] = 2;
    CmdContent[2] = baud; //baud rate
    CmdContent[3] = mode; //character mode

    try {
      CmdPortWriter.write(CmdContent, 0, 4);
    }
    catch (IOException ioe) {
      System.out.println("Moxa port control - ioctrl error: " +
                         "io error occured.");
      System.out.println(ioe.toString());
    }

    return WaitCmdResult(PortControlOptions.D_COMMAND_IOCTL);
  }

  /**
   * Set Async Port flow control.
   *
   * @param CTSmode do CTS H/W flow control or not.
   * @param RTSmode do RTS H/W flow control or not.
   * @param TxXon do Tx XON/XOFF S/W flow control or not.
   * @param RxXon do Rx XON/XOFF S/W flow control or not.
   *
   * @return 0 if successful ,otherwise -1.
   */
  public short flowctrl(byte CTSmode, byte RTSmode, byte TxXon,
                        byte RxXon) {
    /*
       System.out.println();
       System.out.println("Set flow control for port " + IPofMoxa + ":" +
       PortofMoxa +
       " with CTS " + CTSmode + ", RTS " + RTSmode +
       ", TxXon " + TxXon + ", RxXon " + RxXon + " ... ...");
     */
    byte[] CmdContent = new byte[8];
    CmdContent[0] = PortControlOptions.D_COMMAND_FLOWCTRL;
    CmdContent[1] = 4;
    CmdContent[2] = CTSmode;
    CmdContent[3] = RTSmode;
    CmdContent[4] = TxXon;
    CmdContent[5] = RxXon;

    try {
      CmdPortWriter.write(CmdContent, 0, 6);
    }
    catch (IOException ioe) {
      System.out.println("Moxa port control - flowctrl error: " +
                         "io error occured.");
      System.out.println(ioe.toString());
    }

    return WaitCmdResult(PortControlOptions.D_COMMAND_FLOWCTRL);
  }

  /**
   * Set Async Port line control.
   * @param DTRon set DTR on or not.
   * @param RTSon set RTS on or not.
   * @return 0 if successful ,otherwise -1.
   */
  public short lctrl(byte DTRon, byte RTSon) {
    //System.out.println();
    //System.out.println("Set line control of port " + IPofMoxa + ":" + PortofMoxa +
    //                   " with DTR " + DTRon + ", RTS " + RTSon + " ... ...");
    byte[] CmdContent = new byte[8];
    CmdContent[0] = PortControlOptions.D_COMMAND_LINECTRL;
    CmdContent[1] = 2;
    CmdContent[2] = DTRon;
    CmdContent[3] = RTSon;

    try {
      CmdPortWriter.write(CmdContent, 0, 4);
    }
    catch (IOException ioe) {
      System.out.println("Moxa port control - linectrl error: " +
                         "io error occured.");
      System.out.println(ioe.toString());
    }

    return WaitCmdResult(PortControlOptions.D_COMMAND_LINECTRL);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -