gpt4 book ai didi

C# 套接字模型 View 控件

转载 作者:行者123 更新时间:2023-12-03 12:06:55 25 4
gpt4 key购买 nike

以下是我正在处理的套接字类的一部分。我坚持的是在 serverEndAccept 我想传递/返回一个字符串,表明接受已经成功。这些我要使用代表吗?也通过声明代表它不会违 react 用程序模型隔离吗?即我需要这是一个独立的类,将来可以单独使用。我确信对此有一个理智的解决方案,但作为编程的新手,目前它超出了我的范围,所以我在问。

谢谢。

    public void serverBeginAceept(int serverPort)
{
mainSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

IPEndPoint ipEndPoint = new IPEndPoint(IPAddress.Any, serverPort);

mainSocket.Bind(ipEndPoint);
mainSocket.Listen(MAX_CONNECTIONS);
mainSocket.BeginAccept(new AsyncCallback(serverEndAccept), mainSocket);
}

public void serverEndAccept(IAsyncResult iar)
{
Socket oldServer = (Socket)iar.AsyncState;
mainSocket = oldServer.EndAccept(iar);
}

我想我可以让这些方法返回一个字符串!也许那是最好的选择。

最佳答案

您可以创建一个状态类来将异步操作的状态保持在开始和结束之间,如下所示:

class AcceptState
{
public Socket Socket{ get; set; }
public string IdString { get; set; }
public Action<string> Accepted { get; set; }
}

public void serverBeginAceept(int serverPort, string id, Action<string> accepted)
{
mainSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

IPEndPoint ipEndPoint = new IPEndPoint(IPAddress.Any, serverPort);

var state = new AcceptState() {
Socket = mainSocket,
IdString = id,
Accepted = accepted,
};

mainSocket.Bind(ipEndPoint);
mainSocket.Listen(MAX_CONNECTIONS);
mainSocket.BeginAccept(new AsyncCallback(serverEndAccept), );
}

public void serverEndAccept(IAsyncResult iar)
{
var state = (AcceptState)iar.AsyncState;
mainSocket = state.Socket.EndAccept(iar);
state.Accepted(state.IdString);
}

你可以用 lambda 来这样称呼它:
serverBeginAccept(1234, "My ID", s => MessageBox.Show(s));

这将弹出一个消息框,其中包含您在接受连接时传入的任何字符串。

关于C# 套接字模型 View 控件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1997351/

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