程序正确.你要用循环读取出来.这是我随便改的.但不能正常显示色彩,还有无法交互输入.
你自己仔细研究吧.
/*
* 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);
} }
}
你自己仔细研究吧.
/*
* 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);
} }
}
好像服务端都没有发过来换行符,用readline读不出数据。我试过用readchar可以读出一个?,用readbyte可以读出-1。是不是要和服务器协商一些什么东西啊?
以下是登录握手过程: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);
}
}
}