让我们回顾一下小插座应用。在这个应用程序中,我已经从另一个主机读取了一些数据并发回了一些数据。
如果我断开主机之间的连接(例如断开以太网电缆),我就不会在第一次发送呼叫时收到错误(它已成功完成)。错误将在稍后(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();
}
}
}