我程序中有这样的代码:
1: Socket clientSocket = serverSocket.accept();
2: InputStream is=clientSocket.getInputStream();
3: ObjectInputStream ois=new ObjectInputStream(is);
4:...每次运行到第三行整个程序就停止往下运行了,
忘大虾求解!!
在线等

解决方案 »

  1.   

    import java.io.*;
    import java.net.ServerSocket;
    import java.net.Socket;public class test {
    public static void main(String[] args) throws Exception
    {
                      ServerSocket serverSocket=new ServerSocket(56789);
    Socket clientSocket = serverSocket.accept();
    InputStream is=clientSocket.getInputStream();
    System.out.println("not past");
    ObjectInputStream ois=new ObjectInputStream(is);
                      System.out.println("pasted");
    }
    }
    以上服务器端程序运行后
    有一个客户端进行连接,屏幕上打印出:not past
    但是没打印出:pasted
    请问是为什么,怎么克服?
      

  2.   

    在网络中最好不要用ObjectInputStream & ObjectOutputStream,
    第一,你都没有指定具体的Class,JVM不知道需要多少字节才可以demarshall,所以会死锁,你需要让这个Class在both server and client都存在,就可以使用
    第二:通过网络marshall Java Object,会有过多的传输overhead,在Object demarshall也会有没有必要的runtime overhead
    第三:ObjectInputStream这样的Object Stream通用性很差,你需要force你的client是Java Client,否则需要比较复杂的language binding来解决如果你一定要用Object stream,参考我说的第一点,如果你们公司在做project,建议不要使用Object Stream,如果非要用,RMI已经做好了这些工作,你就直接用RMI就可以