C# 使用tcplistener侦听特定的IP地址和端口
我正在创建一个屏幕共享应用程序。为了允许nat遍历,我必须通过服务器来完成这项工作,我只是想知道如何检查尝试连接到服务器的客户机是否是我想要连接的客户机,而不是其他人,同时不阻止其他人连接到该端口 我正在考虑使用BeginAcceptTcpClient()而不是AcceptTcpClient()。在它接受连接之前,有没有办法检查谁在尝试连接,以便TcpListener稍后可以接收到它C# 使用tcplistener侦听特定的IP地址和端口,c#,tcp,nat-traversal,C#,Tcp,Nat Traversal,我正在创建一个屏幕共享应用程序。为了允许nat遍历,我必须通过服务器来完成这项工作,我只是想知道如何检查尝试连接到服务器的客户机是否是我想要连接的客户机,而不是其他人,同时不阻止其他人连接到该端口 我正在考虑使用BeginAcceptTcpClient()而不是AcceptTcpClient()。在它接受连接之前,有没有办法检查谁在尝试连接,以便TcpListener稍后可以接收到它 我唯一能做的另一件事是在连接中发送我想发送图像的人的ID,并让服务器处理发送给谁,但这会太慢或资源密集吗?也许你
我唯一能做的另一件事是在连接中发送我想发送图像的人的ID,并让服务器处理发送给谁,但这会太慢或资源密集吗?也许你应该看看如何做到:
- 在第一台机器上启动可观察到的。
- 这将连接到中央服务器并接收将显示给用户的唯一id(票证)
- 在第二台机器上启动观察者。
- 这还会连接到中央服务器,并等待输入所需的id以连接到
- 现在,可观察机器上的用户必须通过不同的渠道(如电话)将id传达给观察者
- 在观察者上输入票证号,服务器可以向两台机器发送彼此的ip地址和端口,它们在其中打孔。如果可以直接连接,则中央服务器已完成其工作,否则双方将向服务器发送数据,并从其客户端向另一客户端发送数据
因此,为了确保连接正确的客户端,只需创建一个唯一的id,双方必须通过不同的通信渠道共享该id。我认为以下内容足以查看是否正确的客户端已连接到您的服务器:
data = System.Text.Encoding.ASCII.GetString(bytes, 0, i);
//There are, of course, better ways of doing this.
if(data.Equals("HandshakeId")
{
//start receiving/sending data in a loop
}
else
{
// Shutdown and end connection
client.Close();
}