gpt4 book ai didi

c# - 具有多个客户端和 Web 界面的复杂套接字应用程序

转载 作者:行者123 更新时间:2023-12-03 12:05:18 24 4
gpt4 key购买 nike

我创建了一个 asp.net 网站。在该网站上,用户可以创建网页并放置按钮。这些按钮通过 Web 套接字将命令发送到我实现的托盘应用程序。然后,托盘应用程序接收命令并使用 TCP 连接将它们传递给各种第三方应用程序。然后第三方应用程序执行命令并将其状态发送回托盘应用程序。托盘应用程序将状态写入 sql 数据库。网站从数据库中读取状态并处理状态(例如,它突出显示发送原始命令的按钮)

现在是一团糟。例如,第三方应用程序都以不同的方式处理通信。我将如何最好地组织这样的应用程序?

我在两者之间使用 ab sql 数据库,因为我不能确定用户不会重新加载网站。然后 Web 套接字会发生什么?此外,它可以按照自己的节奏更新其按钮。这是一个好的解决方案吗?

另外,我对 TCP 和套接字编程的知识也非常缺乏。大多数资源、教程、指南只是给出了非常简单的例子。那里没有更好的东西吗? (书籍、文章)

我正在使用一个在无限循环中接受网站请求的 TCPListener:

static void TcpListenerWorker_DoWork(object sender, DoWorkEventArgs e)
{
server = new TcpListener(IPAddress.Parse(Properties.Settings.Default.TrayAppServer), Properties.Settings.Default.TrayAppPort);

// Start listening for client requests.
server.Start();

// Buffer for reading data
Byte[] bytes = new Byte[256];
String data = null;

// Enter the listening loop.
while (true)
{
if (TcpListenerWorker.CancellationPending)
break;

// Perform a blocking call to accept requests.
// You could also user server.AcceptSocket() here.
TcpClient client = server.AcceptTcpClient();

...

有没有更好的方法将托盘应用程序链接到网站?

托盘应用程序还必须检查第三方应用程序是否正在运行。只有当它正在运行时,才应该创建套接字。如果第三方应用程序崩溃,连接就消失了。如何正确重新建立连接?

如果他可以发送命令,用户现在应该这样做。为此,我检查应用程序是否像这样运行
Process.GetProcessesByName("exApp1");

有没有更好的方法来检查应用程序?也许通过尝试建立 tcp 连接,如果失败,则应用程序没有运行。但是依赖失败的连接尝试可能不是一个好的决定。

会发生很多错误。连接消失,命令没有到达。是否有 API 可以用来更好地处理这些事情(更好的错误和异常处理)?

对不起,如果这一切听起来令人困惑。整个项目一团糟。请告诉我是否应该解释更多。

最佳答案

我会做的一件事是先坐下来解开你脑海中的意大利面。如果您已正确抽象它们,那么 ech 使用不同的通信方式这一事实应该无关紧要。

第一个问题是“您需要 TCP 套接字级别的通信吗?”我在这里看不到任何尖叫"is"的东西。假设你这样做,你的第一个问题是获取套接字通信。首先启动并运行它。如果这是多个客户端,则可以从开源项目开始处理通信位。例如,CodePlex 上有一个名为 Socket Server 的项目可以管理套接字。我个人不喜欢项目的设置方式,但请遵循文档并启动服务器。或者搜索可以为您执行此操作的另一件作品。

你的下一个问题是“我应该设置一个套接字吗?”。如果我是对的,这听起来像是客户端问题;如果是这样,请将其与套接字连接分开解决并完成。我没有足够的带宽来确定您的方法是否在这里最好,但封装该代码,您可以换掉确定应用程序是否稍后运行的方法。

现在让我们跳到多个应用程序以不同的方式进行通信。如果您有一个输入到多个输出,请考虑一个简化的服务总线,然后为需要监听的应用程序编写适配器。如果它是多进一出,那么无论如何您都需要为应用程序编写一个适配器。也许某些应用程序确实需要套接字级别的通信,并且您需要一个套接字到 Web API 适配器(只是一个示例,因为我没有足够的细节)。

建议的核心是分解问题,看看你可以分离和关注什么。许多简单的问题通常比一个大的复杂问题更容易解决。

关于c# - 具有多个客户端和 Web 界面的复杂套接字应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23634010/

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