C#socket.Send尽快得到错误

时间:2016-03-21 15:47:01

标签: c# sockets

让我们回顾一下小插座应用。在这个应用程序中,我已经从另一个主机读取了一些数据并发回了一些数据。

如果我断开主机之间的连接(例如断开以太网电缆),我就不会在第一次发送呼叫时收到错误(它已成功完成)。错误将在稍后(50秒后)出现。我怎样才能减少这个时间?没有选项可以实现数据交换的“协议”(我无法更改远程端,因此我无法强制它向我发送确认收到的数据)。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Sockets;
using System.Text;
using System.Threading;

namespace SocketTest
{
    class Program
    {
        static void Main(string[] args)
        {
            Socket socket = null;
            try
            {
                socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)
                {
                    SendTimeout = 500,
                    ReceiveTimeout = 500
                };
                socket.Connect("192.168.101.253", 4001);
                socket.NoDelay = true;

                while (true)
                {
                    if (socket.Available > 0)
                    {
                        var answer = new byte[128];
                        var actualRead = socket.Receive(answer);
                        answer = answer.Take(actualRead).ToArray();
                        Console.WriteLine("Recieved:{0}", BitConverter.ToString(answer));
                        var strCommand = Encoding.ASCII.GetString(answer);
                        Console.WriteLine("Recieved:{0}", strCommand);
                    }

                    socket.Send(new byte[10] {1, 2, 3, 4, 5, 6, 7, 8, 9, 0});

                    Thread.Sleep(500);
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
            Console.ReadLine();

        }
    }
}

0 个答案:

没有答案