通过Verizon Aircard发送UDP数据包

时间:2011-12-07 23:15:09

标签: c# .net udp

如果有人在其他地方询问并回答,我道歉。我搜索并阅读了所有密切的主题,并没有找到一个打击......

这是我的情况。我的客户端有软件发送和接收UDP数据包。最终用户软件在通过Verizon aircard连接的笔记本电脑上运行。 (我将在后面解释为什么这很重要......)他们希望我在设定的时间间隔内从服务器请求报告,这样他们就不必记得从服务器请求它。要做到这一点,我必须诱骗服务器认为我是它的客户端软件,并尊重我的要求。它没有听起来那么糟糕。

我的程序通过UDP数据包将其请求发送到服务器。服务器认为该请求来自它自己的客户端软件,并将结果发送回客户端。他们的移动客户端处理信息,我的程序闲置到下一个间隔。每个人都很开心。我通过将wireshark放在系统上并观察来回的数据包,然后解析UDP数据包来实现这一点。

根据wireshark,客户端在端口6767上发送数据包,服务器在端口6868上接收它。当我直接连接到他们的网络时(作为测试),我能够正常工作。但是,当我将我的软件移动到他们的移动设备上,在verizon aircard上运行时,它不起作用。据我所知,数据包仍在上升,但服务器无法识别它们。问题是Wireshark不会在Verizon的空中卡上捕获数据包,所以我无法比较字节 - 正如我在网络上所做的那样。我的客户 - 在讨论网络事物时似乎有点恍惚 - 告诉我端口保持不变,无论是在网络上还是在网卡上。

我运行的简单代码如下所示:

public void transmitUDPDataPacket(string IP, string portStr)
 {
    Int32 port = 0;
    try
     {
          port = Convert.ToInt32(portStr);
      }
    catch (Exception ex)
      {
         resultFailed("FAILED: transmitDataPacket " + ex.Message);
         return;
      }
    Socket sending_socket = new Socket(AddressFamily.InterNetwork, 
                          SocketType.Dgram, ProtocolType.Udp);
    IPAddress send_to_address = IPAddress.Parse(IP);
    IPEndPoint sending_end_point = new IPEndPoint(send_to_address, port);
     try
      {
        sending_socket.SendTo(data, data.Length, SocketFlags.None, sending_end_point);
      }
etc.

所以,有些问题:

  1. 我知道如何在UDP命令中指定端点(即6868)。但我没有 看看我在哪里指定它从我的端口出来的端口(即6767)。在那儿 这样的事情?
  2. 不买特殊软件,无论如何都有 捕获Verizon Aircard的数据包?
  3. 我应该使用哪种SocketType枚举?目前,我 我正在使用Dgram,但我想改用RDM - 尽管我没有 认为这会有所不同,无论如何,这是一个想法。

1 个答案:

答案 0 :(得分:1)

对于第1点:您正在寻找Bind()方法。

对于第3点:坚持Dgram,这将大致转换为UDP。还有其他可用的数据报方法:RUDPUDP-liteDCCPRDS,但普通旧UDP将通过公共互联网传输比任何其他替代方案更容易。