【发布时间】:2015-02-19 04:32:53
【问题描述】:
我用 C# 编写了一个程序,服务器正在侦听端口 9000 和 9001。客户端必须使用用户名连接到 9000 端口。如果用户名正确,则它必须连接到 9001 才能发送消息,但必须保持连接到 9000 端口。我做了这部分,但我不知道如何检查连接到 9001 端口的客户端是否与正在侦听 9000 端口的客户端相同。
如何判断连接到9001的客户端是否是9000端口用户名正确的客户端?
【问题讨论】:
-
Socket.RemoteEndPoint 将是相同的。
-
客户端是指IP地址还是创建第一个连接的进程?您可能知道,一台设备(UNIX、Windows)可以启动多个进程来做同样的事情。如果是第一种情况,那么您可以检查 IP,但是,在第二种情况下,您需要传递客户端必须在端口 9001 使用的唯一(整数或密码)令牌。这只是其他技术中的一个想法。
-
@HansPassant:IP 地址可能相同(但具有多个网络适配器的计算机可以为每个连接使用不同的适配器),但端口不会是相同的。此外,在 NAT 路由器后面,您甚至可以处理不同的客户端计算机,它们似乎都来自同一个 IP 地址。
-
一场地震可能会将加利福尼亚倾倒到太平洋中,使 IP 数据包通过朝鲜路由器重新路由,取而代之的是微笑的金正恩的数字化照片。那么,最好回显一个加密的令牌。
-
@HansPassant:我真的不明白你的意思。你是说你从未听说过有两个不同的客户端从同一个 IP 地址连接到同一个 FTP 服务器吗?您是说您认为客户端 可以 使用与第一次连接相同的端口进行第二次连接吗?你似乎暗示这里的任何担忧都是荒谬和想象的,但事实并非如此。而且“
Socket.RemoteEndPoint将是相同的”甚至根本不是 true。端点的 IP 地址可以是,但端口肯定不会。