下面是关于一个 Client 和 Server 的一个非常简单的程序,要达到的目的就是通过把几个数从Client传到Server,然后Server又把一些数传给Client。但结果是Server能够得到Client传来的数,可是Server不能把数传给Client。请问大家,问题出在什么地方?另外,这样的传输问题,一定要用到线程吗? 非常感谢!import java.io.*;
import java.net.*;public class ServerTest {
  public static void main(String[] args) throws IOException {
    ServerSocket welcomeSocket = new ServerSocket(8887);
    System.out.println("Warten auf Client ...");
    Socket connectionSocket = welcomeSocket.accept();    DataInputStream inFromClient = new DataInputStream(new BufferedInputStream(
        connectionSocket.getInputStream()));
    System.out.println("From Cleint: " + inFromClient.readInt());    DataOutputStream outToClient = new DataOutputStream(
        new BufferedOutputStream(connectionSocket.getOutputStream()));
    outToClient.writeInt(234);
    System.out.println("Daten wurden vom Server gesendet!");    inFromClient.close();
    outToClient.flush();
    outToClient.close();
    connectionSocket.close();
    welcomeSocket.close();
  }
}
import java.io.*;
import java.net.*;public class ClientTest {
  public static void main(String[] args) throws IOException {
    Socket clientSocket = new Socket(InetAddress.getLocalHost()
        .getHostAddress(), 8887);
    System.out.print(InetAddress.getLocalHost().getHostAddress());    DataOutputStream outToServer = new DataOutputStream(
        new BufferedOutputStream(clientSocket.getOutputStream()));
    outToServer.writeInt(123);    DataInputStream inFromServer = new DataInputStream(new BufferedInputStream(
        clientSocket.getInputStream()));
    System.out.println("From Server: " + inFromServer.readInt());    outToServer.flush();
    outToServer.close();
    inFromServer.close();
    clientSocket.close();
  }
}

解决方案 »

  1.   

    writeInt(123);之后都flush()一下,因为 你用了Buffered
      

  2.   

    很是有道理。 楼主可以debug一下, 什么都就明白了。
      

  3.   

    把outToServer.flush();
    写在outToServer.writeInt(123);后面就行了,每次写完就用flush,Server也是,把flush跟在write后面。
      

  4.   

    很明显   服务端把流关闭再flash,客户端当然收不到了 inFromClient.close();
        outToClient.flush();
        outToClient.close();
        connectionSocket.close();
        welcomeSocket.close();
      

  5.   

    来分来分[color=#FF0000][/color]
      

  6.   

    先把流close()了,然后再flush(),能得到就怪了
      

  7.   


    是的。服务器端一般都是非阻塞时循环监听请求,捕获一个请求,就将请求内容送到一个新new的线程对象中去运行。关于多线程的知识或具体代码你百度谷歌一下吧(就是继承Thread或实现Runnable接口),应该很容易找到。