一个服务器端是JAVA,客户端是C#写的程序,客户端在XP下开发(基于.netfream2.0),服务器端使用的是JDK1.4,现在客户端拿到vista下就收不到服务器端发送的数据了
客户端程序在98/2000/xp下运行良好,就是在VISTA下收不到数据,现在经过测试,发现服务器端发送数据的时候只要超过256个字节,运行在VISTA下的客户端就收不到数据了(服务器端是运行在LINUX下的)!!再测试,把服务器端放到XP下来运行,客户端在VISTA下运行就完全正常了(说明客户端是没问题的),难道VISTA和LINUX有不兼容的地方???还是微软故意这样做的啊?我晕!!!

解决方案 »

  1.   

    发个今天做的一个做测试的例子吧,有环境的朋友可以帮忙测一下!(放到LINUX下运行) 这是测试服务器端的代码: 
    import java.io.BufferedOutputStream; 
    import java.io.ByteArrayOutputStream; 
    import java.io.DataOutputStream; 
    import java.io.IOException; 
    import java.net.ServerSocket; 
    import java.net.Socket; 
    public class HQService  
    { public static void main(String[] args)  

    System.out.println("start..."); 
    test(256); //循环256次 
    } public static void test(int n) 

    Socket socket1=null; 
    try 

    ServerSocket server = new ServerSocket(8002); 
    System.out.println("server open..."); 
    socket1 = server.accept(); 
    System.out.println("client lianjie.."); 
    DataOutputStream output = new DataOutputStream(new BufferedOutputStream(socket1.getOutputStream())); 
    ByteArrayOutputStream array = new ByteArrayOutputStream(); 
    DataOutputStream output1 = new DataOutputStream(array); for(int i=0;i <n;i++) 

    output1.writeByte(20); 

    output1.flush(); 
    array.flush(); 
    output.write(array.toByteArray()); 
    output.flush(); 
    output1.close(); 
    array.close(); 
    output.close(); 

    catch (IOException e) 

    try { 
    socket1.close(); 
    } catch (IOException e1) { 
    // TODO Auto-generated catch block 
    e1.printStackTrace(); 

    e.printStackTrace(); 

    catch (Exception e1) 

    e1.printStackTrace() ; 
    } } 

      

  2.   

    这是客户端的代码(放到VISTA下运行): 
    using System; 
    using System.Collections.Generic; 
    using System.Text; 
    using System.Net.Sockets; 
    using System.IO; 
    using System.Threading; namespace Test 

        class Program 
        { 
            public int m_iMinLineInterval = 60; 
            public TradeTimeVO[] m_timeRange = null;         static void Main(string[] args) 
            { 
                Program p = new Program(); 
                TcpClient tcpSend = new TcpClient(); 
                TcpClient tcpRes = new TcpClient(); 
                tcpSend.Connect("ip地址", 端口);             p.Res(tcpSend); 
            }         private void Res(TcpClient tcpRes) 
            { 
                Console.WriteLine("开始接收..."); 
                NetworkStream res = tcpRes.GetStream(); 
                BinaryReader br = new BinaryReader(new BufferedStream(res)); 
                while (true) 
                { 
                    byte b = br.ReadByte(); 
                    switch (b) 
                    { 
                        case 20: 
                            Console.WriteLine("收到"); 
                            break; 
                        default: 
                            break; 
                    } 
                } 
                Console.ReadLine(); 
            }     } 

      

  3.   

    发现服务器端[linux]发送数据的时候只要超过256个字节就收不到数据了
    没试过这2种环境下的SOCKET开发也没环境帮你调试,初步怀疑是实际收到的大小不止这个数,超出客户端缓冲区大小直接丢弃了楼主可以打印出客户端接收数据的大小查看一下,一步步调试,不行的话就把客户端缓冲区设大看看。
      

  4.   

    对,我也这样怀疑过,我已经把客户端的缓冲区设置得非常的大了,甚至几M,几十M。但是还是不行!!服务器端发送过来的数据没有那么多,最多也就1M左右!