Tag: 网络

如何检测何时完全接收到协议缓冲区消息?

这是我的另一个问题的一个分支。 如果你愿意,请阅读它,但没有必要。 基本上,我意识到为了在大型消息上有效地使用C#的BeginReceive(),我需要(a)首先读取数据包长度,然后准确读取多个字节或(b)使用数据包结束分隔符。 我的问题是,这些都存在于协议缓冲区吗? 我还没有使用过它们,但是在文档中看起来似乎没有长度标题或分隔符。 如果没有,我该怎么办? 我应该构建消息然后使用长度标头/ EOP分隔符前缀/后缀吗?

关闭和清理Socket连接的正确方法是什么?

我对Socket对象上的相关方法的聚宝盆感到有点困惑,该对象应该关闭并清理套接字连接。 考虑以下: var socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); socket.Connect(“192.168.1.22”, 8333); socket.Send(Encoding.UTF8.GetBytes(“hello”)); // now for the closing fun socket.Shutdown(SocketShutdown.Both); socket.Disconnect(false); socket.Close(); socket.Dispose(); 另外, 这个人说要真正干净地关闭连接,必须执行socket.Shutdown(SocketShudown.Send) ,然后等待对方响应。 什么是关闭,然后清理套接字连接的正确方法?

UDP打孔。 让服务器与客户交谈

我一直在阅读很多关于如何实现UDP打孔的内容但是出于某些原因我无法使其工作。 对于那些不熟悉udp打孔的人来说,这是我自己的定义: 目标是能够在服务器的帮助下在两个客户端(客户端A和客户端B)之间传输数据。 因此客户端A连接到服务器并发送其信息。 客户B也这样做。 服务器具有必要的信息,以便客户端A能够向客户端B发送数据,反之亦然。 因此,服务器将该信息提供给两个客户端。 一旦两个客户端都有关于彼此的信息,就可以在没有服务器帮助的情况下开始在这些客户端之间发送和接收数据。 我的目标是能够做我刚才描述的(udp打孔)。 在此之前,我认为能够从服务器连接到客户端会很有帮助 。 为此,我计划向服务器发送有关客户端的信息。 一旦服务器收到该信息尝试从头开始连接到客户端。 一旦我能够执行,我应该拥有开始实现真正的udp打孔所需的一切。 以下是我设置的方法: 顶级路由器的服务器和底部路由器连接到LAN端口。 底部路由器(NAT)通过其WAN端口连接到顶级路由器。 客户端计算机连接到底部路由器到其中一个LAN端口。 因此,在该连接中,客户端能够看到服务器,但服务器无法看到客户端。 所以我在伪代码中完成的算法是: 客户端连接到服务器。 客户端将一些UDP包发送到服务器,以便在NAT上打开一些端口 将信息发送到客户端正在侦听的端口上的服务器。 一旦服务器收到该信息尝试从头开始连接到客户端。 这是代码中的实现: 服务器: static void Main() { /* Part 1 receive data from client */ UdpClient listener = new UdpClient(11000); IPEndPoint groupEP = new IPEndPoint(IPAddress.Any, 11000); string received_data; byte[] receive_byte_array = listener.Receive(ref […]

如何在.NET中创建虚拟网络适配器?

我想在运行时(通过代码)创建/添加虚拟网络适配器到客户端操作系统,最好是在C#中。 类似于VirtualBox / VMware / Himachi在安装软件时创建的内容。 我猜这将需要一些C / C ++恶作剧用于驱动程序集成,但如果它只用于C#,那就更好了。 我知道OpenVPN,他们的东西主要是在C中,我也知道TUN / TAP驱动程序浮动,我只是不知道这些是否是唯一的解决方案,不需要我为Windows创建一个满载的网络驱动程序。

如何使用套接字通过互联网发送数据?

我想通过桌面应用程序通过互联网发送数据。 我对sockets有点了解。 我已在局域网内传输数据,但现在我想通过互联网传输数据。 传输大量和小量数据的最佳方法是什么? 我的系统连接到可以访问互联网的服务器。 我系统的IP地址是动态的。 我不知道如何将数据发送到连接到互联网的另一个系统。 我需要找到路由器地址吗? (我的IP地址生成为192.168.1.15)。 是否使用了足够的套接字,或者是否需要HTTP?

通过HttpWebRequest传递二进制数据

使用.Net,我想通过HttpWebRequest传递一些二进制数据(一些序列化对象)。 我可以将它放在请求流上,还是需要将其编码为base64字符串? 我的意思是,如果我有: byte[] data = new byte[1000]; GetSomeStrangeData(data); 我是否需要使用Convert.ToBase64String或者我可以将它从HttpWebRequest.GetRequestStream写入流中吗? 后人: http://tools.ietf.org/html/rfc2616 http://msdn.microsoft.com/en-us/library/d4cek6cc.aspx http://www.wireshark.org/ http://www.fiddler2.com

枚举网络会话

我想从计算机管理 – >共享文件夹 – >会话选项卡中将有关已连接网络用户的数据提取到我的c#应用程序中。 任何人都可以指导我必须使用哪些命名空间以及一些示例代码从计算机管理 – >共享文件夹 – >会话选项卡导入用户名和IP地址? 问候

C#Raw套接字端口转发

我正在尝试创建一个简单的C#应用​​程序来执行端口转发,并且需要知道如何使用IP_HDRINCL套接字选项来尝试伪造接收端以认为连接确实是源。 任何例子都将非常感谢。

以编程方式断开网络连接

有没有办法以编程方式临时断开.NET 4.0中的网络连接? 我知道通过这样做我可以获得当前的网络连接状态…… System.Net.NetworkInformation.NetworkInterface.GetIsNetworkAvailable() 但出于测试目的,我想测试我的应用程序丢失网络连接时的行为(没有物理拔出网络电缆)。 谢谢,克里斯。

对SSPI的调用失败,请参阅内部exception – 无法联系本地安全机构

我有一个WPF应用程序,它使用SSLStream连接到服务器并发送/接收一些消息。 我的代码更大程度上基于这个例子(SslTcpClient): https ://msdn.microsoft.com/en-us/library/system.net.security.sslstream(v = vs.110).aspx。 这个工作好几个月了。 但是,在获得此Windows更新(Windows 10版本1511和Windows Server 2016技术预览4的累积更新:2016年6月14日 – https://support.microsoft.com/en-us/kb/3163018 )之后。 我的应用程序开始报告此exception: System.Security.Authentication.AuthenticationException: A call to SSPI failed, see inner exception. —> System.ComponentModel.Win32Exception: The Local Security Authority cannot be contacted — End of inner exception stack trace — at System.Net.Security.SslState.StartSendAuthResetSignal(ProtocolToken message, AsyncProtocolRequest asyncRequest, Exception exception) at System.Net.Security.SslState.CheckCompletionBeforeNextReceive(ProtocolToken message, AsyncProtocolRequest asyncRequest) at System.Net.Security.SslState.StartSendBlob(Byte[] […]