gpt4 book ai didi

c# - 如何从 .NET Core 中的 Socket 接收数据?

转载 作者:可可西里 更新时间:2023-11-01 02:46:12 25 4
gpt4 key购买 nike

我目前正在将硬件库移植到 .NET Core。通信通过 TCP 进行。我对“Socket.BeginReceive”方法有疑问。 MSDN

.NET Core 中似乎没有等效的方法。如何从 TCP 套接字接收数据?

private void InternalDataReceived(IAsyncResult ar)

{
int dataCount = 0;
byte[] buffer;

try
{
if (_client != null && _client.Client != null)
{
dataCount = _client.Client.EndReceive(ar);
}

if (dataCount > 0)
{
try
{
buffer = new byte[dataCount];
Array.Copy(_inBuffer, buffer, dataCount);

if (DataReceived != null)
{
DataReceived(buffer);
}
}
catch (Exception exc)
{
if (exc is System.Net.Sockets.SocketException)
{
Disconnect();
return;
}
}
_client.Client.BeginReceive(_inBuffer, 0, _inBuffer.Length, SocketFlags.None, InternalDataReceived, null);
}
}
catch
{
Disconnect();
}
}

最佳答案

我找到了另一种方法。希望这对其他人有帮助。

基本上我刚刚结束使用 NetworkStream 类。您可以通过调用 TcpClient.GetStream() 获取一个实例。如果您将 using block 与 GetStream 一起使用,您的连接将在 using 之后关闭。这就是我没有在示例中使用它的原因,因为我需要连接才能保持事件状态。

MSDN NetworkStream.Read

我的示例代码:

static void Main(string[] args)
{
TcpClient client = new TcpClient();

client.Client.Connect(IPAddress.Parse("192.168.100.5"), 8000);

//Task.Run(() => ReadData(client));

Task.Run(() => ReadDataLoop(client));

client.Client.Send(Encoding.ASCII.GetBytes("{\"TID\":1111,\"blabla\":{}}"));


while (true)
{

}
}

private static void ReadDataLoop(TcpClient client)
{
while (true)
{
if (!client.Connected)
break;

string xxx = "";
xxx = ReadData(client);
Console.WriteLine(xxx);
}
}

private static string ReadData(TcpClient client)
{
string retVal;
byte[] data = new byte[1024];

NetworkStream stream = client.GetStream();


byte[] myReadBuffer = new byte[1024];
StringBuilder myCompleteMessage = new StringBuilder();
int numberOfBytesRead = 0;


do
{
numberOfBytesRead = stream.Read(myReadBuffer, 0, myReadBuffer.Length);

myCompleteMessage.AppendFormat("{0}", Encoding.ASCII.GetString(myReadBuffer, 0, numberOfBytesRead));

}
while (stream.DataAvailable);



retVal = myCompleteMessage.ToString();


return retVal;
}

关于c# - 如何从 .NET Core 中的 Socket 接收数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41247218/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com