一个服务器端是JAVA,客户端是C#写的程序,客户端在XP下开发(基于.netfream2.0),服务器端使用的是JDK1.4,现在客户端拿到vista下就手不到服务器端发送的数据了,请问有没有高手碰到过??

解决方案 »

  1.   

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

  2.   

    发个今天做的一个做测试的例子吧,有环境的朋友可以帮忙测一下!这是测试服务器端的代码:
    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() ;
    }

    }
    }
      

  3.   

    这是客户端的代码(放到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();
            }    }
    }