我正在为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/

10-10 12:35