日期:2014-05-17  浏览次数:20955 次

第一次执行socket.Receive()的耗时很长,什么原因?(帮忙看一下程序)
下面这一段程序,是客户端和服务端通信的一个主方法。

服务端暂时部署在本机。

在主机运行此程序,速度很快,几乎没有延时。但是,在其它电脑上运行的时候,速度就很慢。

经过断点调试,发现卡在

iRcv = socket.Receive(buf);

这一行代码上。

因为该几次在while循环里面,如果数据量大,是需要多次执行的,但只有第一次的时候耗时很长。

试着每buffer的包改成100字节,也没有用。

为什么?



        /*
         * 
         * 通信主程序:发送和接收
         * 
         */
        private string SendRecieve(string strToSend)
        {
            Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            IPAddress myIP = IPAddress.Parse(strAppServerIP);
            IPEndPoint EPhost = new IPEndPoint(myIP, iAppServerPort);
            try
            {
                socket.Connect(EPhost);
            }
            catch (SocketException e)
            {
                return "ERR" + e.Message;
            }
            socket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReceiveTimeout, 50000);//50秒超时


            byte[] sendBytes = System.Text.Encoding.Default.GetBytes(strToSend + "\rbye\r");
            socket.Send(sendBytes, sendBytes.Length, SocketFlags.None);


            //接收数据
            string strResult = string.Empty;
            byte[] buf = new byte[1024];
            //byte[] buf = new byte[100];

            int iRcv = 0;
            while (true)
            {
                try
                {
                    iRcv = socket.Receive(buf);
                }