【问题标题】:Two Identical applications which communicate over a TCP socket connection on the localhost两个相同的应用程序通过本地主机上的 TCP 套接字连接进行通信
【发布时间】:2022-04-29 22:16:41
【问题描述】:

C#/XAML .NET WPF ... 两个应用程序都需要能够相互连接,并且都应该有侦听器。我将如何做到这一点,因为我知道通常 TCP 套接字是客户端/服务器,而我需要的基本上是两个充当客户端的服务器?有可能吗?

【问题讨论】:

  • 如果 App1 = 服务器和 App2 = 客户端,那么它们仍然可以在两个方向上相互通信。
  • 服务器/客户端二分法实际上归结为“谁尝试连接到谁”——只需...选择一个? “服务器”并不意味着“已安装的服务”或类似的 - 它只是意味着谁在监听连接与谁试图连接到正在监听的人。连接后:连接是全双工的 - 任何一个都可以随时通话
  • 它是环回...为什么 tcp 开销? ... udp 可以正常工作...
  • 我被告知两个应用程序必须具有相同的代码。如果一个是客户端,一个是服务器,我相信会有所不同
  • 这是给我的一个项目。我意识到可能有更好的创作方式,但事实并非如此。

标签: c# .net wpf tcp


【解决方案1】:

首先,很抱歉没有此答案的代码。我不是 C# 开发人员(还)。我正在处理一个非常相似的情况,这将是我第一次涉足该语言。

对于我的场景,我需要同一个应用程序的两个副本来相互通信,但其中一个总是首先启动连接。这是一个非常基本的游戏,两个玩家轮流进行。我无法对 IP 进行硬编码,因为即使不在本地主机上它们也需要能够交谈。我的解决方案是:

  1. 一位用户选择“开始游戏”。
  2. 应用程序一将打开一个套接字并开始监听。这使它成为服务器的角色。
  3. 然后应用一将显示 IP 和端口号。
  4. 用户二选择“加入游戏”
  5. 用户二输入提供的套接字信息。
  6. 应用二会打开一个socket进行发送,从而成为客户端。
  7. 一旦连接完全建立,这些套接字将被移交给处理实际游戏的代码。这是可能的,因为无论谁开始,双方的游戏玩法都是相同的。

对于您的方案,您可以跳过 IP 和端口的显示。双方将开始收听并开始发送。一旦建立连接,他们就可以停止做不需要的事情。即,如果成功打开客户端套接字,它将停止侦听,因为它不再需要处于服务器角色。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-09-23
    • 1970-01-01
    • 2013-01-30
    • 2014-05-17
    • 1970-01-01
    • 2011-03-13
    • 2016-07-09
    相关资源
    最近更新 更多