Я написал кусок кода, чтобы слушать удаленных клиентов через протокол TCP / IP. я смог получить данные от клиентов. но я понятия не имею, как узнать, перестает ли клиент отправлять данные, чтобы завершить соединение. это мой код:
static void Main(string[] args)
{
TcpListener listener = new TcpListener(IPAddress.Any, 34400);
TcpClient client;
listener.Start();
while (true) // Add your exit flag here
{
client = listener.AcceptTcpClient();
ThreadPool.QueueUserWorkItem(ThreadProc, client);
}
}
private static void ThreadProc(object state)
{
string imei = string.Empty;
var client = ((TcpClient) state);
NetworkStream nwStream = ((TcpClient) state).GetStream();
byte[] buffer = new byte[client.ReceiveBufferSize];
try
{
while (true)
{
int bytesRead = nwStream.Read(buffer, 0, client.ReceiveBufferSize);
string dataReceived = Encoding.ASCII.GetString(buffer, 0, bytesRead);
if (imei == string.Empty)
{
imei = dataReceived;
Console.WriteLine("IMEI received : " + dataReceived);
Byte[] b = { 0x01 };
nwStream.Write(b, 0, 1);
}
else
{
int dataNumber = Convert.ToInt32(buffer.Skip(9).Take(1).ToList()[0]); ;
var result = 0;
while (dataNumber > 0)
{
var parser = new TeltonikaDevicesParser(false);
result = parser.Decode(new List<byte>(buffer), imei);
dataNumber--;
}
nwStream.Write(
result > 0 ? new byte[] { 0x00, 0x00, 0x00, 0x01 } : new byte[] { 0x00, 0x00, 0x00, 0x00 }, 0,
4);
}
}





Вы этого не сделаете. TCP / IP не заботится о закрытии соединения на одном конце. Состояние отключения получается только при попытке передать данные через.
Вам нужно реализовать простой протокол через TCP / IP для завершения вашего кода:
это хороший вопрос, я могу придумать только два выхода: 1) обмен сообщениями, который завершается, и 2) выход из тайм-аута простоя