一个服务器端是JAVA,客户端是C#写的程序,客户端在XP下开发(基于.netfream2.0),服务器端使用的是JDK1.4,现在客户端拿到vista下就收不到服务器端发送的数据了
客户端程序在98/2000/xp下运行良好,就是在VISTA下收不到数据,现在经过测试,发现服务器端发送数据的时候只要超过256个字节,运行在VISTA下的客户端就收不到数据了(服务器端是运行在LINUX下的)!!再测试,把服务器端放到XP下来运行,客户端在VISTA下运行就完全正常了(说明客户端是没问题的),难道VISTA和LINUX有不兼容的地方???还是微软故意这样做的啊?我晕!!!
客户端程序在98/2000/xp下运行良好,就是在VISTA下收不到数据,现在经过测试,发现服务器端发送数据的时候只要超过256个字节,运行在VISTA下的客户端就收不到数据了(服务器端是运行在LINUX下的)!!再测试,把服务器端放到XP下来运行,客户端在VISTA下运行就完全正常了(说明客户端是没问题的),难道VISTA和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() ;
} }
}
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();
} }
}
没试过这2种环境下的SOCKET开发也没环境帮你调试,初步怀疑是实际收到的大小不止这个数,超出客户端缓冲区大小直接丢弃了楼主可以打印出客户端接收数据的大小查看一下,一步步调试,不行的话就把客户端缓冲区设大看看。