【问题标题】:Client server connection via socket in c#c#中通过套接字的客户端服务器连接
【发布时间】:2015-12-15 23:07:41
【问题描述】:

我正在尝试使用 c# 中的套接字建立客户端和服务器异步连接。事实上,我已经下载了clientserver 的示例。我在徘徊那条线的位置:IPHostEntry ipHostInfo = Dns.GetHostEntry("host.contoso.com"); 如果 IPhostEntry 中的服务器和客户端,我应该检索什么?该行是否应该返回每个设备(服务器或客户端)的主机、IP 和端口?

编辑:我在 host.contoso.com 的位置复制已经运行的服务器的 ip,我收到以下消息:使用了与请求的协议不兼容的地址.

编辑:事实上,我添加了IPHostEntry ipHostInfo = Dns.GetHostEntry("127.0.0.1:11000");,但我没有收到这样的主机。

【问题讨论】:

  • 我应该在 host.contoso 位置添加什么?如何获取客户端的 IPHostEntry?

标签: c# sockets


【解决方案1】:

从示例中您在客户端代码上只有一个 ipHostInfo,服务器不会有这个,因为服务器将充当......以及......服务器本身。示例代码:

IPHostEntry ipHostInfo = Dns.Resolve(Dns.GetHostName());
IPAddress ipAddress = ipHostInfo.AddressList[0];
IPEndPoint localEndPoint = new IPEndPoint(ipAddress, 11000);

此代码将建立服务器(将使用它正在运行的机器上的当前 IP 并使用端口 11000。

    IPHostEntry ipHostInfo = Dns.Resolve("host.contoso.com");
    IPAddress ipAddress = ipHostInfo.AddressList[0];
    IPEndPoint remoteEP = new IPEndPoint(ipAddress, port);

客户端的此代码将连接到该服务器(假设 host.contoso.com 将是您特定情况下的服务器名称,很可能是您计算机的 IP 或您正在运行的计算机的 IP你的服务器上)。

【讨论】:

  • 只是ip?还是ip+port?
  • 我试图在 host.contoso.com 的位置复制已经运行的服务器的 ip,我收到以下消息:使用了与请求的协议不兼容的地址。
  • Dns.Resolve(string) 用于查找提供的主机地址的 IP 地址。主机地址可以是 DNS 已注册为命名实体的任何内容。通常采用www.google.com 的形式,www 是子域,google.com 是俗称的域,而com 在技术上是顶级域。主机名:www.google.com 传递给 Dns.Resolve(string) 时将返回该命名地址的 IP 地址。如果您已经有了 IP 地址,则无需尝试解析。
  • 并且端口不是从主机名获得的,它是从 URL 的protocol 部分解析的。例如:http://www.google.com(或http://www.google.com:80 也是相同的,并且可以用于覆盖http 部分)协议是http,它是默认端口80(但实际上可以被覆盖为任何东西)。对于您的应用程序,您需要硬编码一个标准端口以供其使用,或者允许其可配置,但客户端需要知道并提供该端口号以及主机地址或 IP。
  • 那么我应该为 IPAddress 和 IPENdPoint 添加什么?
猜你喜欢
  • 1970-01-01
  • 2018-06-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多