.Net Tcp/ip 数据接收

  • 本文关键字:数据 ip Tcp Net .net tcp
  • 更新时间 :
  • 英文 :


我写了一堆代码,以便通过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实现一个简单的协议才能完成代码:

  • 提前知道您需要多少数据。IMEI号码具有固定的长度。
  • 等到传输超时。你得到的就是你的。
  • 首先发送您打算传输的数据量,当您获得所有数据时,您的工作就完成了。

最新更新