.Net Tcp/ip数据接收
为了通过tcp/ip协议监听远程客户端,我编写了一组代码。 我能够从客户那里接收数据。但是如果客户端停止发送数据以完成连接,我不知道如何处理。 这是我的代码:.Net Tcp/ip数据接收,.net,tcp-ip,.net,Tcp Ip,为了通过tcp/ip协议监听远程客户端,我编写了一组代码。 我能够从客户那里接收数据。但是如果客户端停止发送数据以完成连接,我不知道如何处理。 这是我的代码: static void Main(string[] args) { TcpListener listener = new TcpListener(IPAddress.Any, 34400); TcpClient client; listener.Sta
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);
}
}
static void Main(字符串[]args)
{
TcpListener侦听器=新的TcpListener(IPAddress.Any,34400);
TCP客户机;
listener.Start();
while(true)//在此处添加退出标志
{
client=listener.AcceptTcpClient();
QueueUserWorkItem(ThreadProc,客户端);
}
}
私有静态void ThreadProc(对象状态)
{
string imei=string.Empty;
var客户端=((TcpClient)状态);
NetworkStream nwStream=((TcpClient)状态)。GetStream();
byte[]buffer=新字节[client.ReceiveBufferSize];
尝试
{
while(true)
{
int bytesRead=nwStream.Read(buffer,0,client.ReceiveBufferSize);
string dataReceived=Encoding.ASCII.GetString(缓冲区,0,字节读取);
if(imei==string.Empty)
{
imei=接收到的数据;
Console.WriteLine(“IMEI接收:+dataReceived”);
字节[]b={0x01};
nwStream.Write(b,0,1);
}
其他的
{
int dataNumber=Convert.ToInt32(buffer.Skip(9).Take(1).ToList()[0]);
var结果=0;
而(数据编号>0)
{
var parser=new TeltonikaDevicesParser(false);
结果=parser.Decode(新列表(缓冲区),imei);
数据编号--;
}
nwStream.Write(
结果>0?新字节[]{0x00,0x00,0x00,0x01}:新字节[]{0x00,0x00,0x00,0x00},0,
4);
}
}
您不需要。TCP/IP不太关心关闭一端的连接。只有当您尝试通过发送数据时,才会出现断开状态
您必须通过TCP/IP实现一个简单的协议来完成代码:
- 提前知道您需要多少数据。IMEI编号有一个固定的长度
- 等待转机超时。你收到的都是你的
- 首先发送你打算传输多少数据,当你得到所有数据时,你的工作就完成了