我正在创建一个屏幕共享应用程序。为了允许nat遍历,我必须通过服务器执行此操作,我只是想知道如何检查尝试连接到服务器的客户端是我想要连接的客户端而不是其他人,而实际上并没有阻止其他人连接到该端口。
我想使用BeginAcceptTcpClient()而不是AcceptTcpClient()是否有办法检查谁在尝试连接之前以这种方式接受连接,以便以后可以通过TcpListener获取它?
我能做的唯一另一件事就是将我想要发送图像的人的ID发送到连接中,让服务器处理发送给谁的人,但这会太慢或资源密集吗?
答案 0 :(得分:0)
也许你应该看看join.me如何做到这一点:
因此,为了确保连接正确的客户端,只需创建一个唯一的ID,双方必须通过不同的通信渠道共享。
答案 1 :(得分:0)
我认为以下内容应足以确定正确的客户端是否已连接到您的服务器:
创建TCPListener并开始同步或异步接受连接。我使用了MSDN中的同步示例:http://msdn.microsoft.com/en-us/library/system.net.sockets.tcplistener.accepttcpclient(v=vs.110).aspx
当客户端连接时,创建一个流来读取客户端发送的数据,如下所示:
NetworkStream stream = client.GetStream(); i = stream.Read(bytes,0,bytes.Length);
将消息从字节反序列化为字符串,并检查它是否与您期望的唯一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();
}
`
一个更有趣的问题是如何捕捉您将要分享的实际屏幕。我个人在VS C ++中做过这个,性能还可以。有几种方法可以做到这一点,即使用GDI +,使用DirectX或OpenGL,列表继续...
我很想知道你打算用什么:)