gpt4 book ai didi

c# - 尝试创建一个可以写入控制台或表单应用程序的方法

转载 作者:行者123 更新时间:2023-11-30 20:09:26 25 4
gpt4 key购买 nike

我正在开发通用服务器和客户端程序。我面临的问题是,当我在客户端和服务器的 OnDataReceived 中时,我不知道如何处理数据。理想情况下,它应该将接收到的数据输出到一个窗口中,但我不知道它是一个表单应用程序还是一个控制台应用程序。所以问题是我如何创建一个通用方法来处理这两者,或者如果这不可能,我应该怎么做?

我正在使用的代码:

            SocketPacket theSockId = (SocketPacket)asyn.AsyncState;

int iRx = theSockId.m_currentSocket.EndReceive(asyn);
char[] chars = new char[iRx + 1];
Decoder decode = Encoding.Default.GetDecoder();
int charLength = decode.GetChars(theSockId.dataBuffer, 0, iRx, chars, 0);
String szData = new String(chars);

//Handle Message here

WaitForData();

和套接字数据包类:

    class SocketPacket
{
public Socket m_currentSocket;
public byte[] dataBuffer = new byte[1024];//Buffer to store the data by the client

public SocketPacket(Socket socket)
{
m_currentSocket = socket;
}
}

附言。我不知道是否需要知道,但我正在做异步客户端/服务器。

最佳答案

您的通信类不应该关心它们接收到的数据发生了什么。相反,他们应该将数据提供给需要它的类。一种方法是提供一个 getData() 方法,该方法接收数据然后将其返回给调用者。更好的方法是提供一个 DataArrived 事件,只要您收到数据就会触发该事件。这样,任意数量的消费者都可以监听数据,但您的通信代码不必知道哪些类正在监听或他们打算如何处理数据。

编辑:

一个简单的例子:

public class MyClassWithEvent
{
public delegate void DataArrivedDelegate(string data);
public event DataArrivedDelegate DataArrived;

public void GetSomeData()
{
// Communication code goes here; stringData has the data

DataArrivedDelegate handler = DataArrived;
if (handler != null)
{
// If you want to raise the event on this thread, this is fine
handler(stringData);
}
}
}

在你的监听类中:

public MyListener
{

public MyListener(MyServer server)
{
// Sets MyListenerMethod to be called when DataArrived is raised
server.DataArrived += MyListenerMethod;
}

public void MyListenerMethod(string data)
{
// Do something with the data
Console.WriteLine(data);
}
}

关于c# - 尝试创建一个可以写入控制台或表单应用程序的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6189988/

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