C# Tcp端口连接显示不兼容的值
考虑以下代码:C# Tcp端口连接显示不兼容的值,c#,tcp,port,tcpclient,tcplistener,C#,Tcp,Port,Tcpclient,Tcplistener,考虑以下代码: void Connect(IPAddress address, int port) { TcpListener listener = new TcpListener(address, port); listener.Start(); TcpClient client= new TcpClient(); //The following line would actually block the caller, but ignore this fact ATM.
void Connect(IPAddress address, int port)
{
TcpListener listener = new TcpListener(address, port);
listener.Start();
TcpClient client= new TcpClient();
//The following line would actually block the caller, but ignore this fact ATM.
var conn= listener.AcceptTcpClient();
client.Connect(address,port);
var address = ((IPEndPoint)conn.Client.RemoteEndPoint).Address;
var port = ((IPEndPoint)conn.Client.RemoteEndPoint).Port;
}
客户端指定的端口号与我能够从连接中获得的端口号不一致。这个属性的文档非常模糊,我在这里或MSDN上找不到任何类似的问题。有人知道为什么会这样吗
非常感谢您的帮助。
Eyal.TCP连接两侧都有一个独立的
(IP,端口)
对。您正在连接到(地址、端口)
,但您是从其他地方连接的。操作系统会自动选择from IP和port作为合适的值。您永远不会点击客户端。Connect
@AbdullahSaleem-请注意我关于阻塞的评论-我希望示例尽可能简单。这就是我忽略阻塞的原因。实际实现解决了这一问题。谢谢你!对封锁有何评论?在客户端连接之前,您不能接受连接。这两行的顺序不对。此代码的行为与所述不符。实际上,如果您不正确,您可以接受连接,这将阻止连接,直到连接被接受。。但是,如果服务器不接受,则无法连接。我提到的注释是代码块中唯一的注释@EJPI也怀疑这一点。有没有办法获得我想看到的信息?是否在客户端指定的端口上尝试连接?您需要知道哪个端口?远程端口?您的代码按原样工作。LINQPad:var client=new System.Net.Sockets.TcpClient();client.Connect(“google.com”,80);var address=((System.Net.IPEndPoint)client.client.RemoteEndPoint).address;var port=((System.Net.IPEndPoint)client.client.RemoteEndPoint).port;address.Dump();port.Dump();假设我在端口13000连接到服务器,我希望在TcpListener返回的值中看到该数字。这可能吗?当然不是在侦听器中,而是在客户机中。侦听器未连接。我猜你指的是客户?不管怎样,你可以问任何一个客户,得到这个信息。您拥有的代码应该可以工作,我还发布了可执行代码,您可以这样运行。这回答了问题吗?