先代码如下:
server:
 try 
                    {
            int i=1;
            ServerSocket server = new ServerSocket(listenPort);
            Socket incomingConnection = null;
            System.out.println("server is ok,wait client request. port="+listenPort);
            while(true)
                              {
               System.out.println("wait... ");
                incomingConnection = server.accept(); 
                System.out.println("client request "+i);
                i++;
                handleConnection(incomingConnection);
                              }
                       }        
...........................////////////////////////////////////////////////////////////////////////////////////////
client           System.out.println("begin connection...hostIp="+hostIp+":hostport="+hostPort);
            Socket client = new Socket(hostIp,hostPort);
           // System.out.println("client.isConnected()=" + client.isConnected());
            System.out.println("begin connection......");
            socketReader = new BufferedReader(new InputStreamReader(client.getInputStream()));
            socketWriter = new PrintWriter(new BufferedWriter(new OutputStreamWriter(client.getOutputStream())),true); 
            System.out.println("connetc is ok");////////////////////////////////////////////////////////////////            System.out.println("send message begin");
            socketWriter.println(fileNameToGet);   
            System.out.println("send message end");
            socketWriter.flush();
            System.out.println("send message flush");
            String line = null;
            System.out.println(socketReader.readLine());
            while((line=socketReader.readLine())!=null)
             System.out.println("line="+line);
                fileLines.append(line+"\n");////////////////////////////////////////////////////////////////////////具体情况是:上面代码同时在xp或虚拟机(centos5.5)运行,一切正常。但现在把server代码在虚拟机centos运行,client在XP上运行,显示如下:server:
server is ok,wait client request. port=25888
wait... client :
begin connection...hostIp=10.1.14.71:hostport=25888
client.isConnected()=true
begin connection......
connetc is ok
send message begin
send message end
send message flush
java.net.SocketException: Connection reset  //这句是等了好长时间才出来。为何client提示连接上了,server没反应?防火墙关了,而且xp能够与虚拟机互相ping通。

解决方案 »

  1.   

    handleConnection去调试吧,看看是如何返回数据的。
      

  2.   

    估计虚拟机运行client,xp运行server也会堵塞
    很有可能是println readLine造成的
    系统不一样,换行符也不一样,如果系统不能正确读取到换行符,就一直堵塞
    可以尝试启动的时候,带上属性设置参数

    java -Dline.separator=xxx your_java
      

  3.   

    我server放在xp上,client放在centos上,没问题的,一切正常。奇怪了。
      

  4.   

    可能是println readLine造成的
    系统不一样,换行符也不一样,如果系统不能正确读取到换行符,就一直堵塞
    可以尝试启动的
      

  5.   

    java -Dline.separator=xxx your_java  这个中,xxx是什么意思。centos换行符是什么?
      

  6.   

    windows换行是\r\n,十六进制数值是:0D0A。
    LINUX换行是\n,十六进制数值是:0A
    centos 是LINUX的吧
      

  7.   

    centos 是linux的版本。我试一下。
      

  8.   

    java -Dline.separator=\n MulThreadedRemoteSocketServer  是这样吗?还是不行。
      

  9.   

      System.out.println("client request "+i);  服务器这句没打出来,应该是客户端没连接吧。
    但客户端又提示连接上了,这个不明白。
      

  10.   

    这样不行的,这样是\n字符串
    或者你两边都设置同一个字符串,或者你在启动时候,认为用代码设置
    System.getProperties().setProperty("line.separator", "\n");
      

  11.   

    System.getProperties().setProperty("line.separator", "\n");
    都加到程序启动,还是没用。
      

  12.   

     System.out.println("run ...");
             PrintWriter streamWriter = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socketToHandle.getOutputStream())), true);          BufferedReader streamReader = new BufferedReader(new InputStreamReader(socketToHandle.getInputStream()));
                String fileToRead = streamReader.readLine();
                System.out.println("client request message :"+fileToRead);
               // BufferedReader fileReader = new BufferedReader(new FileReader(fileToRead)); 
                String line ="server is ok,this is return message ";
               // while((line=fileReader.readLine())!=null) 
               // {
                 //System.out.println("line="+line);
                streamWriter.println(line);
              //  }
               // fileReader.close();
                streamWriter.close();
                streamReader.close();
                System.out.println(" ok");这是服务器上的代码。高人看看有什么不对的地方。
      

  13.   

    如果System.out.println("client request "+i);都没打印的话,就是服务器没收到任何连接请求
    虚拟机也有虚拟网卡的,所以应该是配置的问题
    另,上面的代码大概看了一眼,
    streamWriter.close();
    streamReader.close();
    最好不要close,这个close会导致整个socket的close,具体可以参考javadoc的文档说明,可以让客户端在整个交互结束后退出时关闭socket就可以了。
      

  14.   

    [root@mpc /]# netstat -n |grep 25888
    tcp        0      0 10.1.14.71:25888            10.1.14.90:2003             SYN_RECV
    证明客户端的连接请求已经到服务器了。为何没返回呢。
    http://www.jdzj.com/DATUM/showart.asp?art_id=5961
    LINUX不熟悉啊,