我正在为iSCSI写一个代理应用程序来做一些诊断工作(想想iSCSI的Fiddler)-我试图一次捕获一个数据包,我不想读取任意大小并最终得到一个iSCSI的全部数据包和另一个数据包的一半-我真的很想看到与Wireshark显示的数据类型相同的数据。为此,我使用了Socket.ReceiveMessageFrom()
。
但是,其中一个参数称为“端点”,我不确定该如何处理。有什么线索吗?这是我的代码,您能告诉我我是否完全不合时宜:
Tuple<byte[], int> readOnePacket(TcpClient conn) {
var flags = SocketFlags.None;
EndPoint endpoint = null; /*** You can't set this to null!! ***/
byte[] buffer = new byte[10 * 0x100000];
int offset = 0;
int bytes_received;
do {
IPPacketInformation packet_information;
bytes_received = conn.Client.ReceiveMessageFrom(buffer, offset, BufferSize,
ref flags, ref endpoint, out packet_information);
if (flags == SocketFlags.Partial) {
// We only want to transfer full packets
offset = bytes_received;
continue;
}
} while (false);
return new Tuple<byte[], int>(buffer, bytes_received + offset );
}
最佳答案
它不是TcpClient.ReceiveMessageFrom(),而是Socket.ReceiveMessageFrom()
如果查看documentation,您将阅读以下内容:
编辑:
实际上,将其设置为null是一个坏主意。
关于c# - Socket.ReceiveMessageFrom()的终结点参数是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2359775/