【发布时间】:2011-12-07 23:15:08
【问题描述】:
如果在其他地方有人问过并回答了这个问题,我深表歉意。我搜索并阅读了所有关闭的主题,但没有找到一个热门...
这是我的情况。我的客户端有发送和接收 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.
所以,一些问题:
- 我知道如何在 UDP 命令中指定端点(即 6868)。但我不 看看我在哪里指定它从我的一端发出的端口(即 6767)。有没有 这样的事情?
- 少买专用软件,反正有吗 捕获 Verizon Aircard 的数据包?
- 我应该使用哪种 SocketType 枚举?目前,我 我正在使用 Dgram,但我想切换到 RDM——尽管我没有 认为这在这里会有什么不同,无论如何,这是一个想法。
【问题讨论】:
-
Wireshark 是最好的网络嗅探器之一,尝试捕获 Verizon Aircard 数据包,我认为你应该使用 Dgram
-
Wireshark 无法从 aircard 中捕获数据包。 (请参阅常见问题解答中的问题 #5 [链接]winpcap.org/misc/faq.htm#Q-5[/link])