【问题标题】:Client server (service) application connecting locally but not over the network本地连接但不通过网络连接的客户端服务器(服务)应用程序
【发布时间】:2018-11-21 17:38:07
【问题描述】:

我在 C# 中创建了一个 Windows 服务服务器程序,它将从串行端口接收数据消息,然后将这些消息发送到已连接到服务器的任何客户端。我还用c#开发了客户端程序(windows窗体)。

服务器程序最初是作为控制台应用程序开发的,以便于开发。在将服务器作为控制台应用程序运行时,与客户端的连接运行良好,我可以在与服务器相同的 PC 上运行客户端,也可以在连接到同一网络的笔记本电脑上连接客户端。

连接方式为: -客户端启动 -client 向特定端口广播 (udp) -server 响应 UDP 广播 -client 使用从 UDP 响应中获得的 IP 地址发起与服务器的 TCP 连接

由于将服务器从控制台应用程序更改为 Windows 服务,我无法再使用此方法将笔记本电脑上运行的客户端程序连接到服务器。与服务器在同一台机器上运行的客户端程序连接成功。谁能提供一些关于调查什么的建议?

【问题讨论】:

  • 将应用程序作为服务运行在特定帐户下,该帐户可能具有或不具有与 Windows 登录相同的凭据。您必须确保以相同的用户登录身份运行。这可以在 Windows 本身的 Windows 服务控制面板中进行更改。另一方面,我不知道你是否知道,但如果不能保证 UDP 可以从客户端传输到服务器,它也不会按照发送的顺序接收字节。

标签: c# tcp server udp client


【解决方案1】:

为了解决我遇到的问题,我在运行服务器服务应用程序的机器的防火墙设置中添加了一条新规则。我允许传入连接使用的端口,这解决了我的问题。

我还更改了网络发现程序:

  1. 服务器每秒向端口 (UDP) 广播一次
  2. 客户端等待来自服务器的广播包
  3. 客户端使用从广播包中获取的 IP 地址与服务器建立 TCP 连接

【讨论】:

    最近更新 更多