Skip to content

Commit

Permalink
修复UDP 通道驱动,读取数据错误问题。优化异部读数据。
Browse files Browse the repository at this point in the history
  • Loading branch information
cdy816 committed Apr 6, 2021
1 parent a714758 commit 2c4456f
Show file tree
Hide file tree
Showing 3 changed files with 82 additions and 8 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,8 @@ public class SerisePortClientChannel : ChannelBase

private bool mForSyncCall = false;

private byte[] mRelayData;

#endregion ...Variables...

#region ... Events ...
Expand Down Expand Up @@ -181,15 +183,29 @@ private byte[] CopyReceiveBufferData(int count)
while (cc < count)
{
lock (mLockObj)
vdata = mReceiveBuffers.Dequeue();
{
if (mRelayData != null)
{
vdata = mRelayData;
}
else
{
vdata = mReceiveBuffers.Dequeue();
}
}
cc += vdata.Length;
if (cc <= count)
{
vdata.CopyTo(btmp, offset);
mRelayData = null;
}
else
{
Array.Copy(vdata, 0, btmp, offset, vdata.Length - (cc - count));
int relaydatasize = (cc - count);
byte[] rd = new byte[relaydatasize];
Array.Copy(vdata, vdata.Length - relaydatasize, rd, rd.Length, relaydatasize);
mRelayData = rd;
}
offset += vdata.Length;
removecount += vdata.Length;
Expand Down
18 changes: 17 additions & 1 deletion Run/Driver/Cdy.Spider.TcpClient/TcpClientChannel.cs
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,8 @@ public class TcpClientChannel : ChannelBase

private bool mIsConnecting = false;

private byte[] mRelayData;

#endregion ...Variables...

#region ... Events ...
Expand Down Expand Up @@ -186,15 +188,29 @@ private byte[] CopyReceiveBufferData(int count)
while (cc < count)
{
lock (mLockObj)
vdata = mReceiveBuffers.Dequeue();
{
if (mRelayData != null)
{
vdata = mRelayData;
}
else
{
vdata = mReceiveBuffers.Dequeue();
}
}
cc += vdata.Length;
if (cc <= count)
{
vdata.CopyTo(btmp, offset);
mRelayData = null;
}
else
{
Array.Copy(vdata, 0, btmp, offset, vdata.Length - (cc - count));
int relaydatasize = (cc - count);
byte[] rd = new byte[relaydatasize];
Array.Copy(vdata, vdata.Length - relaydatasize, rd, rd.Length, relaydatasize);
mRelayData = rd;
}
offset += vdata.Length;
removecount += vdata.Length;
Expand Down
54 changes: 48 additions & 6 deletions Run/Driver/Cdy.Spider.UdpClient/UdpClientChannel.cs
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,12 @@ public class UdpClientChannel : ChannelBase

private Thread mReceiveThread;

System.IO.MemoryStream mReceiveBuffer = new System.IO.MemoryStream();

private System.Net.IPEndPoint rp;

private byte[] mRelayData;

#endregion ...Variables...

#region ... Events ...
Expand Down Expand Up @@ -62,7 +68,10 @@ public class UdpClientChannel : ChannelBase
protected override bool InnerOpen()
{
mIsClosed = false;
mClient = new System.Net.Sockets.UdpClient(mData.Port);

rp = new System.Net.IPEndPoint(System.Net.IPAddress.Parse(mData.ServerIp), mData.Port);

mClient = new System.Net.Sockets.UdpClient();
mClient.Connect(System.Net.IPAddress.Parse(mData.ServerIp), mData.Port);

mClient.Client.SendTimeout = mData.DataSendTimeout;
Expand Down Expand Up @@ -102,7 +111,7 @@ protected override bool InnerClose()
/// </summary>
private void ThreadPro()
{
var rp = new System.Net.IPEndPoint(System.Net.IPAddress.Parse(mData.ServerIp), mData.Port);

while (!mIsClosed)
{
if (mClient != null && mClient.Client.Available > 0 && !mIsTransparentRead)
Expand Down Expand Up @@ -140,15 +149,32 @@ private byte[] CopyReceiveBufferData(int count)
while (cc < count)
{
lock (mLockObj)
vdata = mReceiveBuffers.Dequeue();
{
if (mRelayData != null)
{
vdata = mRelayData;
}
else
{
vdata = mReceiveBuffers.Dequeue();
}
}
cc += vdata.Length;
if (cc <= count)
{
vdata.CopyTo(btmp, offset);
mRelayData = null;
}
else
{

Array.Copy(vdata, 0, btmp, offset, vdata.Length - (cc - count));

int relaydatasize = (cc - count);
byte[] rd = new byte[relaydatasize];
Array.Copy(vdata, vdata.Length - relaydatasize, rd, rd.Length, relaydatasize);
mRelayData = rd;

}
offset += vdata.Length;
removecount += vdata.Length;
Expand Down Expand Up @@ -375,7 +401,7 @@ public override byte[] Receive(int count, int timeout, out int receivecount)
/// <param name="count"></param>
/// <returns></returns>
public override byte[] Receive(int count)
{
{
byte[] bval=null;
if(mClient!=null)
bval = CopyReceiveBufferData(count);
Expand All @@ -391,7 +417,22 @@ public override byte[] Receive(int count)
/// <returns></returns>
public override int Read(byte[] buffer, int offset, int len)
{
return mClient.Client.Receive(buffer, offset, len, SocketFlags.None);
if ((mReceiveBuffer.Length - mReceiveBuffer.Position) < len)
{
var count = mClient.Receive(ref rp);
mReceiveBuffer.Write(count, 0, count.Length);
mReceiveBuffer.Position = 0;
}

if ((mReceiveBuffer.Length - mReceiveBuffer.Position) >= len)
{
return mReceiveBuffer.Read(buffer, offset, len);
}
else
{
return mReceiveBuffer.Read(buffer, offset, (int)mReceiveBuffer.Length);
}

}

/// <summary>
Expand All @@ -403,7 +444,8 @@ public override int Read(byte[] buffer, int offset, int len)
/// <returns></returns>
public override bool Write(byte[] buffer, int offset, int len)
{
return mClient.Client.Send(buffer,offset,len,SocketFlags.None)>0;
mReceiveBuffer.SetLength(0);
return mClient.Client.Send(buffer,offset,len,SocketFlags.None)> 0;
}


Expand Down

0 comments on commit 2c4456f

Please sign in to comment.