//接上续//T1类
//T1类用于对网络连接的管理
//利用Streamconnector类实现线程处理
public class T1{
 //socket(tao接字)的准备
 protected Socket serverSocket; //连接用socket
 public OutputStream serverOutput; //向网络输出的流
 public BufferedInputStream serverInput; //从网络输入的流
 
 //openConnection方法
 //利用地址和端口号制作socket构成流
 public void openConnection(String host, int port)
  throws IOException, UnknownHostException
 {
  serverSocket = new Socket(host, port);
  serverOutput = serverSocket.getOutputStream();
  serverInput = new BufferedInputStream(serverSocket.getInputStream());
 }
 //main_proc方法
 //启动执行网络操作的线程
 public void main_proc() throws IOException
 {
  try
  {
   //生成支持线程的StreamConnector类的对象
   StreamConnector stdin_to_socket = new StreamConnector(System.in, serverOutput);
   StreamConnector socket_to_stdout = new StreamConnector(serverInput, System.out);
   //生成线程
   Thread input_thread = new Thread(stdin_to_socket);
   Thread output_thread = new Thread(socket_to_stdout);
   //启动线程
   input_thread.start();
   output_thread.start();
  }
  catch (Exception e)
  {
   System.err.print(e);
   System.exit(1);
  }
 }
 
 //main方法
 //建立TCP连接,执行处理
 public static void main(String[] arg){
  try
  {
   T1 t = null;
   t = new T1();
   t.openConnection(arg[0], Integer.parseInt(arg[1]));
   t.main_proc();
  }
  catch (Exception e)
  {
   e.printStackTrace();
   System.exit(1);
  }
 }
 
 //StreamConnector类
 //接收流,通过两者结合传递数据
 //StreamConnector 类是用五十三生成线程的类
 class StreamConnector implements Runnable{
  InputStream src = null;
  OutputStream dist = null;
  //构造器 接收参数为输入输出流
  public StreamConnector(InputStream in, OutputStream out){
   src = in;
   dist = out;
  }
  //处理的主体
  //无限循环进行流的读写
  public void run(){
   byte[] buff = new byte[1024];
   while(true){
    try
    {
     int n = src.read(buff);
     if (n>0)
     {
      dist.write(buff, 0, n);
     }
    }
    catch (Exception e)
    {
     e.printStackTrace();
     System.err.print(e);
     System.exit(1);
    }
   }
  }
 }
}
//结束

解决方案 »

  1.   

    //调试环境:winxp 安好java设好classpath
    //先运行服务器端程序chatServer 一直开着
    //然后运行T1程序如:java t1 你的机子名 6000
    //让别的机子拷过你的t1类去,java t1 你的机子名 6000
    //输入姓名就可以通话了.
    欢迎提问指导~~
    偶现在独自摸石头过河,有愿做偶的向导者,[email protected],thanks!!!
    :}
      

  2.   

    ft,我还以为你做了个telnet server(port 21)能接管标准telnet客户端呢
    不过还是鼓励
      

  3.   

    不是我做的,呵呵,是我抄的.
    这个估计是你说的吧.
    //telnet程序Telnet.java
    //此程序用于建立以实现与指定地址的端口进行标次输入输出操作的连接
    //若被连接方是Telnet端口(23号)则时行协商
    //协商时,拒绝服务器端的所有请求
    //使用方法(1):java Telnet 服务器地址 端口号
    //使用方法(2):java Telnet 服务器地址(2)时,假设端口号为23
    //运行示例: java Telnet kiku.fuis.fukui-u.ac.jp 23
    //要结束请按<Ctrl> + C键//导入库
    import java.net.*;
    import java.io.*;//Telnet类
    //Telnet类用于实现网络连接管理
    //利用StreamConnector类进行线程处理
    //有2种构造器,分别对应使用方法(1)和(2)
    public class Telnet{
    Socket serverSocket; //连接用socket
    public OutputStream serverOutput; //用于网络输出的流
    public BufferedInputStream serverInput; //用于网络输入的流
    String host; //连接服务器的地址
    int port; //连接服务器的端口号
    static final int DEFAULT_TELNET_PORT = 23; //telnet的端口号(23号) //构造器(1):指定地址和端口号时用
    public Telnet(String host, int port){
    this.host = host;
    this.port = port;
    }
    //构造器(2)只指定地址时用
    public Telnet(String host){
    this(host, DEFAULT_TELNET_PORT); //假定为Telnet端口
    } //openConnection 方法
    //由地址和端口号虽构成Socket而开成流
    public void openConnection()
    throws IOException, UnknownHostException
    {
    serverSocket = new Socket(host, port);
    serverOutput = serverSocket.getOutputStream();
    serverInput = new BufferedInputStream(serverSocket.getInputStream());
    //若连接的是Telnet端口则进行协商
    if (port == DEFAULT_TELNET_PORT)
    {
    negotiation(serverInput, serverOutput);
    }
    }
    //main_proc方法
    //启动进行网络处理的线程
    public void main_proc()
    throws IOException
    {
    try
    {
    //生成线程用streamConnector类的对象
    StreamConnector stdin_to_socket = new StreamConnector(System.in, serverOutput);
    StreamConnector socket_to_stdout = new StreamConnector(serverInput, System.out);
    //生成线程
    Thread input_thread  = new Thread(stdin_to_socket);
    Thread output_thread = new Thread(socket_to_stdout);
    //启动线程
    input_thread.start();
    output_thread.start();
    }
    catch (Exception e)
    {
    System.err.print(e);
    System.exit(1);
    }
    }
    //定义用于协商的命令
    static final byte IAC  = (byte)255;
    static final byte DONT = (byte)254;
    static final byte DO   = (byte)253;
    static final byte WONT = (byte)252;
    static final byte WILL = (byte)251;

    //negotiation 方法
    //利用NVT进行协商通信
    static void negotiation(
    BufferedInputStream in, OutputStream out)
    throws IOException
    {
    byte[] buff = new byte[3]; //接收命令的数组
    while (true)
    {
    in.(buff.length);
    if (in.available()>=buff.length)
    {
    in.read(buff);
    if (buff[0]!=IAC) //协商结束
    {
    in.reset();
    return;
    }else if (buff[1] == DO){ //对于DO命令......
    buff[1] = WONT; //用WONT作为应答
    out.write(buff);
    }
    }
    }
    }
    //main方法
    //建立TCP连接,开始处理
    public static void main(String[] arg){
    try
    {
    Telnet t = null;
    //由参数个数决定调用哪个构造器
    switch(arg.length){
    case 1: //只指定服务器地址
    t = new Telnet(arg[0]);
    break;
    case 2: //指定地址和端口
    t = new Telnet(arg[0], Integer.parseInt(arg[1]));
    break;
    default: //使用方法不正确时
    System.out.println("usage:java Telnet<host name>{<port number>}");
    return;
    } t.openConnection();
    t.main_proc();
    }
    catch (Exception e)
    {
    e.printStackTrace();
    System.exit(1);
    }
    }
    }//StreamConnector类
    //接收流参数以二者结合实现数据传递 
    //StreamConnector类是用于构造线程序的类
    class StreamConnector implements Runnable{
    InputStream src   = null;
    OutputStream dist = null; //构造器 接收输入输出流
    public StreamConnector(InputStream in, OutputStream out){
    src  = in;
    dist = out;
    }
    //执行处理的函数体
    //无限循环进行流的读写
    public void run(){
    byte[] buff = new byte[1024];
    while (true)
    {
    try
    {
    int n = src.read(buff);
    if (n>0)
    {
    dist.write(buff, 0, n);
    }
    }
    catch (Exception e)
    {
    e.printStackTrace();
    System.err.print(e);
    System.exit(1);
    }
    }
    }
    }
      

  4.   

    不错,有没有Telnet Server的Demo,能接管操作系统命令行的Telnet登录?