Tag: networking

如何获得主机的默认网络适配器的广播地址? C#

假设我想将udp消息发送到子网中的每个主机(然后从我子网中的任何主机接收udp消息): 目前我这样做: IPAddress broadcast = IPAddress.Parse(“192.168.1.255”); 但是当然,如​​果子网与192.168.1 / 24不同,我希望这可以通过dinamically完成。 我尝试过: IPAddress broadcast = IPAddress.Broadcast; 但IPAddress.Broadcast代表“255.255.255.255”,它不能用于发送消息(它抛出exception)…所以: 我如何获得本地网络适配器广播地址(或网络掩码)? 这是我参加的最终解决方案 public IPAddress getBroadcastIP() { IPAddress maskIP = getHostMask(); IPAddress hostIP = getHostIP(); if (maskIP==null || hostIP == null) return null; byte[] complementedMaskBytes = new byte[4]; byte[] broadcastIPBytes = new byte[4]; for (int i = 0; i < 4; […]

在UDP中接收数据包

假设我的程序通过网络(UDP)发送1000个字节。 是否保证接收器将在一个“批处理”中接收1000个字节? 或许他需要进行几次“阅读”,直到他收到整个信息? 如果后者是真的,我如何确保同一消息的数据包顺序不会“混淆”(按顺序),或者协议可能保证它? 编辑 :也就是说,我的邮件是否可能被拆分为多个数据包? (如果我尝试发送10000mb消息,那么会发生什么?)

.NET可移植类库和UDP支持

我正在为飞利浦Hue Lights写一个C#库。 我试图在.NET便携式设备中编写基本API包装器,这样我就可以将这个库重用于各种平台,例如Windows 8 / RT / WP。 API本身使用REST遍布HTTP,因此HttpWebRequest将满足我的大部分需求。 可以使用SSDP over UDP发现控制灯本身的网桥。 但是,我无法找到在便携式类库(PCL)中使用UDP套接字的方法。 没有可用的System.Net.Sockets 。 System.Net命名空间中没有任何内容可以允许它。 我在Windows.Networking.Sockets看到了一个DatagramSocket ,但是我无法在Intellisense中看到该命名空间。 有谁知道如何在.NET PCL下获得SSDP的UDPfunction? 我真的不想将发现function与核心库分开。 现在我的目标是针对.NET 4.5 + SL 5 + WP 8 + .NET for Windows Store 。 我的印象是套接字仍然可用。

如何确定网络路径是否可用(在线或离线)?

使用.NET / C#,如何确定网络路径(例如\ mymachine \ myfolder)是否可用(在线或离线)? WMI是否有办法通知此类事件? 谢谢!

你如何在C#中获得原始TCP数据包?

我想收到原始TCP数据包,然后以相同的工作负载发送回来。 它应该看起来像这样: void OnPacketReceived(TcpPacket p) { byte [] body = p.GetBody(); } 注意:我需要TCP数据包而不是以太网帧。

udp数据包没有通过

我有以下设置: 专用服务器 – >互联网 – >调制解调器(telenet) – >路由器 – >客户端 客户端启动与服务器的tcp连接以在服务器上注册自己,并通过以下信息提供: 客户端的mac地址 外部IP; 这是通过使用whatsmyip.org的webclient字符串下载来检索的 服务器上发生了一些更新,当然需要通知客户端,因此客户端可以自己启动同步会话: 为了通知客户端,服务器从服务器向调制解调器发送udp数据包(之前从客户端收到的外部IP) ,同时客户端正在侦听路由器后面的udp数据包。 问题是我没有收到任何数据包..我的情况是否可能,我该怎么办? 要求: 通过在路由器上启用端口转发来解决此问题不是一种选择 服务器有一个固定的IP 客户端有时可能会脱离Internet 解决方案必须适用于不同类型的路由器 发送和接收数据包的两个端口都是相同的 所有编程都在C#中完成 服务器在有更新时通知客户端,客户端可能永远不会轮询服务器以获取更新以防止过载(如果多个客户端同时执行此操作) Greets Daan并提前感谢 编辑: 服务器的代码示例: UdpClient udpSender = new UdpClient(); IPEndPoint localServerGateway = new IPEndPoint(IPAddress.Parse(externalIp), 8003); string message = “testmessage”; byte[] messageBytes = Encoding.ASCII.GetBytes(message); try { udpSender.Send(messageBytes, messageBytes.Length, localServerGateway); } […]

TcpListener:监听每个地址,包括GPRS IP地址

我们有一个简单的遗留软件,我们需要通过端口15001使用TCP / IP进行通信。我们需要在端口15001上侦听遗留软件以建立连接,然后读取它发送给我们的任何内容。 我们已经在互联网上测试了这个解决方案,它运行得很好。 但是,如果我们通过GPRS TCP / IP网络测试相同的解决方案,则不会。 已经检查了所有基础知识,我们可以ping通GPRS网络中的其他设备,并且端口15001不会被任何防火墙阻止。 那么我的TcpListener可能有问题吗? 它初始化如下: tcpServer = new TcpListener(IPAddress.Any, TCP_PORT); 我假设它监听系统上每个可用的IPv4接口,因为我使用了IPAddress.Any? 有没有人知道这两个网络之间的区别是什么? (即使没有任何区别)如果有什么我需要更改为我的TcpListener?

在C#中使用字节数组

我有一个字节数组,代表一个完整的TCP / IP数据包。 为了澄清,字节数组的排序如下: (IP标头 – 20字节)(TCP标头 – 20字节)(有效负载 – X字节) 我有一个Parse函数接受一个字节数组并返回一个TCPHeader对象。 它看起来像这样: TCPHeader Parse( byte[] buffer ); 给定原始字节数组,这是我现在调用此函数的方式。 byte[] tcpbuffer = new byte[ 20 ]; System.Buffer.BlockCopy( packet, 20, tcpbuffer, 0, 20 ); TCPHeader tcp = Parse( tcpbuffer ); 有没有一种方便的方法可以将TCP字节数组(即完整TCP / IP数据包的字节20-39)传递给Parse函数,而无需先将其提取到新的字节数组? 在C ++中,我可以执行以下操作: TCPHeader tcp = Parse( &packet[ 20 ] ); C#中有类似的东西吗? 我想尽可能避免临时字节数组的创建和后续垃圾收集。

游戏网络弹丸实施/概念问题

我试图通过同步射弹射击和游戏网络来解决常见问题的某种解决方案,但我不确定什么是最合适的。 这是一个2D动作侧卷轴,带有几个射弹(没有即时击中武器),并且已经有很多框架(C#XNA框架和Lidgren库)。 此时我认为架构将被建模,类似于半衰期源引擎。 客户端将在过去(固定步骤30fps)并使用客户端侧预测插入远程实体~100ms或大约3帧。 服务器拥有模拟权限。 考虑使用移动编码实现似乎很好,但是当涉及到射弹时,我不确定如何最好地为所有玩家提供最佳游戏。 示例问题: 客户A. 客户B. 服务器 客户A和B只是站在一起面对面。 客户端B开始向A发射并像往常一样向服务器发送输入。 服务器检测到火灾输入并开始在其模拟中发射武器,同时将事件转发给客户端A. 客户端A接收消息但过去仍然在插入客户端B(同时射弹现在在服务器和客户端Bs机器上朝向A)。 客户端A的渲染最终到达B射击射弹并开始渲染的点。 客户A看到它并跳转,轻松地在屏幕上清除它。 然而,射弹击中了他在服务器上和客户端Bs的观点。 这也是2D sidescroller所以一切都是可见的。 这似乎是使用插值的一个基本的副作用(我认为这是必须的,但我愿意接受建议),因为即使没有任何网络延迟,也存在固有的插值延迟。 题: 我知道它不可能是完美的,但有没有更多或更好的方法可以实现混淆或改善它以使它看起来很好/无缝,或者我错过任何明显的东西? 在实际发射射弹之前,武器的发射确实有一个短暂的动画时间,我意识到我们可以利用那个时间来隐藏一些延迟,但是武器不会立即射击,而且任何我看它的方式总是与客户试图躲避射弹和其他客户看到他们的射弹击中它们之间存在巨大差距。 对于玩家正在移动的情况,我们可以在服务器上使用滞后补偿,但我不认为这可以帮助这种情况? 如果射弹击中导致客户A的位置被改变,我将不得不倒回客户A并用新数据重放他的输入,或者如果它没有,我必须从空中移除射弹(也许他们死了),丑陋无论哪种方式 :(。

WAN上的TCP和UDP套接字服务器

我正在尝试创建一个兼容TCP和UDP的服务器和客户端。 服务器在LAN设置中运行良好,但在WAN上传输时不会收到UDP消息。 我相信这是因为用于发送数据的UDP套接字不会在NAT表中保留足够长的时间来返回任何信息。 有没有办法让UDP端口在路由器中保持打开状态(没有端口转发)或者使用与已连接的TCP连接相同的UDP端口? 提前致谢。