@Test
public void startClient() throws UnknownHostException, IOException {
Socket socket = new Socket("localhost", 10088);
System.out.println("客户端启动成功!");
InputStream is = socket.getInputStream();
// InputStreamReader isr=new InputStreamReader(is);
OutputStream os = socket.getOutputStream(); try {
os.write("我是客户端!".getBytes());
int inf = 0;
StringBuilder sb = new StringBuilder();
while((inf=is.read())!=-1) { sb.append((char)inf);
}
System.out.println(sb);

finally {
is.close();
os.close();
socket.close();
} }

解决方案 »

  1.   

    写成sb.toString()试试看~
      

  2.   

    与sb无关,写成死的字符串都没有,例如System.out.println("Hello!");都执行不到,反正就是这一句不会执行
      

  3.   

    @Test
    public  void startServer() throws IOException {
    int port = 10088;
    String path = "d:/Files/file.txt"; ServerSocket server = new ServerSocket(port);// 监听端口
    System.out.print("服务器启动成功!");
    while (true) {
    final Socket socket = server.accept();// 获取socket;
    System.out.println("有客户端连接我!");
    final OutputStream os = socket.getOutputStream();
    final InputStream is = socket.getInputStream();

    Thread thread = new Thread(new Runnable() { @Override
    public void run() {
    try {
    // 写到客户端信息
    os.write("My".getBytes());
    // 写到客户端
    int inf = 0;
    StringBuilder sb = new StringBuilder();
    while ((inf = is.read()) != -1) {
    sb.append((char) inf);
    }
    System.out.println(sb);
    } catch (Exception ex) {
    ex.printStackTrace();
    } finally {
    try {
    os.close();
    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    try {
    is.close();
    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    }
    } });
    thread.start(); }
    }
    以上是服务器端程序,在客户端程序中,按理说System.out.println(sb);的输出要是My;但是,这一句压根没执行到,把System.out.println(sb);放到while循环里面,倒是正常输出 M (第一次循环输出)  My(第二次循环输出);  
      

  4.   

    这是个典型的Socket的InputStream  read()方法阻塞问题,与读取文件不一样,读取Socket并不会自动知道是否读完,不会自动返回-1;当数据实际已经读完,而此时客户端不知道已经读完,客户端就的read()就会一直等待数据的到来,即:产生阻塞.
      

  5.   

    finally前面加上catch,确认没有先抛异常。
      

  6.   

    阻塞在了 is.read