程序正确.你要用循环读取出来.这是我随便改的.但不能正常显示色彩,还有无法交互输入.
你自己仔细研究吧.
/*
 * Created on 2005-6-6
 *
 * TODO To change the template for this generated file go to
 * Window - Preferences - Java - Code Style - Code Templates
 */
package temp;import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintStream;
import java.net.Socket;/**
 * @author wang
 *
 * TODO To change the template for this generated type comment go to
 * Window - Preferences - Java - Code Style - Code Templates
 */
public class Jtelnet
{    /**
     * 
     */
    public Jtelnet()
    {
        super();
        // TODO Auto-generated constructor stub
    }    public static void main(String[] args)
    {
        String host = "lzu.sopai.net";
int port = 23;
Socket socket;

InputStream Is;
OutputStream Os;
DataInputStream DIS;
PrintStream PS;
try {
socket = new Socket(host, port);
System.out.println("client ok");
//获得对应socket的输入/输出流

DataInputStream sin = new DataInputStream(socket.getInputStream()); 
BufferedReader brin=new BufferedReader(new InputStreamReader(sin));
PrintStream sout = new PrintStream(socket.getOutputStream());  // 从控制台读入字符流  //  DataInputStream in = new DataInputStream(System.in);    System.out.println("Connected to"+socket.getInetAddress()+":"+ socket.getPort()); 
   //DataInputStream in = new DataInputStream(System.in);
   //s = in.readLine(); //读取用户输入的字符串
  
   String s = "xxx";  
   sout.print(s); //将读取得字符串传给server
  
   sout.flush();
   String line="";
   System.out.print("please wait server's message...");
   while((line=brin.readLine())!=null)
   {
   //s = sin.readLine();  //从服务器获得字符
   System.out.println(line);
   }
  
   sin.close(); //关闭数据输入流
   sout.close(); //关闭数据输出流
  
   socket.close(); //关闭socket
}
catch (Exception e) {
   System.out.println("Error:" + e);
}    }
}

解决方案 »

  1.   

    谢谢楼上的,不过我测试过,还是不行,程序运行的时候停在please wait server's message...。
    好像服务端都没有发过来换行符,用readline读不出数据。我试过用readchar可以读出一个?,用readbyte可以读出-1。是不是要和服务器协商一些什么东西啊?
      

  2.   

    对了,我在网上找到一个jtelnet的包,不过没有使用手册,不知道怎么用,有没有ggjj知道,指点一下?
      

  3.   

    这个是因为服务器在等待握手信息,你应该看看RFC,里面有详细描述这些信息的
    以下是登录握手过程:import java.io.*;
    import java.net.Socket;public class TelnetExample {
    public static int hand(InputStream is, OutputStream os) throws IOException {
    while(true) {
    int ch = is.read();
    if(ch < 0 || ch != 255)
    return ch;
    int cmd = is.read();
    int opt = is.read();
    switch(opt) {
    case 1: // echo协商选项,本程序未处理
    break;
    case 3: // supress go-ahead(抑制向前选项)
    break; 
    case 24: // terminal type(终端类型选项)
    if(cmd == 253) {
    os.write(255);
    os.write(251);
    os.write(24);

    os.write(255);
    os.write(250);
    os.write(24);
    os.write(0);
    os.write("dumb".getBytes());
    os.write(255);
    os.write(240);
    } else if (cmd == 250) {
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    int svr = is.read();
    while(svr != 240) {
    baos.write(svr);
    svr = is.read();
    }
    System.out.println("Svr:" + baos.toString());
    }
    break;
    default:
    if (cmd == 253) {
    os.write(255);
    os.write(252);
    os.write(opt);
    }
    }
    }
    }
    public static void main(String[] args) throws Exception {
    Socket s = new Socket("host",23);
    InputStream is = s.getInputStream();
    OutputStream os = s.getOutputStream();
    System.out.println(hand(is,os)); os.write("user\n".getBytes());
    os.write("password\n".getBytes());
    BufferedReader br = new BufferedReader(new InputStreamReader(is));
    char[] buf = new char[1024];
    int read = br.read(buf); 
    while(read > 0) {
    System.out.println(new String(buf,0,read));
    read = br.read(buf);
    }
    }
    }