import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.InetSocketAddress;
import java.net.Socket;public class Tt { /**
 * @param args
 */
public static void main(String[] args)
{
Socket sock;
int nRtn = 0;
InetSocketAddress IpInfo;
PrintWriter out;
BufferedReader sockIn;

BufferedReader in = new BufferedReader(new InputStreamReader(System.in));

System.out.println("------- 终端维护系统 -------");
System.out.println("1. 上传文件");
System.out.println("2. 下载文件");

try
{
nRtn = in.read();
in.close();
}
catch(IOException e)
{
System.out.println(e.toString());
}
switch(nRtn)
{
// 上传文件
case '1':

break;

        // 下载文件
case '2':
System.out.println("远程终端文件目录");
IpInfo = new InetSocketAddress("127.0.0.1", 9897);
sock = new Socket();
try
{
sock.connect(IpInfo, 100);
sock.setSoTimeout(3000);
out = new PrintWriter(sock.getOutputStream(), true);
sockIn = new BufferedReader(new InputStreamReader(sock.getInputStream())) ;

out.write("ls");

char[] chBuf = new char[512];
sockIn.read(chBuf);

sockIn.close();
out.close();

sock.close();
}
catch(IOException e)
{
System.out.println(e.toString());
}
break;

default:
break;
}

System.out.println("end."); }

}sockIn.read(chBuf); 这行总是收不到服务器的回应? 是不是我的用法不对啊?服务器端是vc写的一直在监听, 用vc写了一个测试程序连接后发"ls" 可以收到回应, 但这个java程序不知为什么总是收不到. 请大家指教.

解决方案 »

  1.   

    out.write("ls");

    char[] chBuf = new char[512];
    sockIn.read(chBuf);

    sockIn.close();
    out.close();

    sock.close();收到server的信息后 你没有任何动作 
    System.out.println(new String(chbuf));
      

  2.   

    有动作啊, 
    out.write("ls"); 向服务器发送 ls
    char[] chBuf = new char[512];
    sockIn.read(chBuf); 接收服务器返回结果, 就这行一直收不到服务器的返回!
      

  3.   

    write 就是发送啊, flush() 是干什么的?
      

  4.   

    out.write("ls");
    write之后,outputstream在等下一个数据流,因为默认情况下,outputstream里的数据流的量超过一定数之后才发送走.
    out.flush();则是不管现在有没有达到这个量,先发送出去.
      

  5.   

    K3179我试了一下果然加了out.flush() 后就能收到服务器的返回了. 请问这是为什么啊?