异步UDP接收空字节

时间:2014-10-09 14:17:02

标签: c# multithreading macos asynchronous mono

我有这样的服务器:

    public void Run() {
        while (true) {
            if (curThreads < maxThreads) {
                curThreads++;
                AsyncCallback callback = new AsyncCallback (ProcessRequest);
                client.BeginReceive (callback, this);
            }
        }
    }

回调是:

    public static void ProcessRequest(IAsyncResult result) {
        LogSink lg = result.AsyncState as LogSink;

        IPEndPoint endPoint = new IPEndPoint (IPAddress.Any, 0);
        byte[] message = lg.client.EndReceive (result, ref endPoint);

        String str = Encoding.ASCII.GetString (message, 0, message.Length);
        Console.WriteLine(str);

        lg.curThreads--;
    }

现在,如果我将所有内容限制为1个线程,它的效果非常好......我正在发送的字符串正确接收。如果我使用10个线程的限制(10个异步接收),那么我会收到一个空值的字节数组。缓冲区的大小是正确的(我发送的字符串的大小),但所有字符都为空。

奇怪的是,这是Mac OS X中Mono的行为。它似乎适用于使用Visual Studio的Windows机器。

感谢您的任何见解。

编辑1:我刚刚在Windows 7虚拟机上安装了Visual Studio 2010 Express,当使用Microsoft编译器编译时,我的代码在Windows下完美运行。这可能是单声道问题吗?还是Mac OS X的问题?

0 个答案:

没有答案