none
移植通信客户端,发送数据遇到问题,请问这个函数该如何写? RRS feed

  • 问题

  • 原有服务端程序不改。还是 Win32写的服务端。
    下面是原客户端的发送代码:

    int __tcp_send(SOCKET isocket, BYTE *buffer, int ibuflen)
    {
        int iRet = 0;
    
        // 判断socket是否有效
        if (!tool_isValidSocket(isocket))
        {
            return errSocket;
        }
        
        iRet = send(isocket, (char*)buffer, ibuflen, 0);
    
        return iRet;
    }
    

    改写成以下代码后,运行到writer->StoreAsync();就报错,错误信息为“0x02c963f0 L"在意外的时间调用了方法。\r\n"”,附上我改写的代码,请大神们看看是怎么回事。。。

    int __tcp_send(StreamSocket^ isocket,BYTE *buffer, int ibuflen)
    {
     size_t iRet = 0; 
     auto buff = ref new Array<unsigned char>(buffer,ibuflen);
     DataWriter^ writer = ref new DataWriter(isocket->OutputStream);
     writer->WriteBytes(buff);
    
     try
     {
      writer->StoreAsync();
     }catch(Exception^ e)
     {
      String^ err = e->Message;
     }
     return ibuflen;
    }
    
    2012年11月29日 3:37

答案

  • Hi,

    writer->StoreAsync();并不能直接这样用。你需要使用.then()来写,具体可以参考这个博客:

    http://blogs.msdn.com/b/windowsappdev_cn/archive/2012/03/26/windows.aspx

    StreamSocket有一个官方的C++例子你可以看一下:

    http://code.msdn.microsoft.com/windowsapps/StreamSocket-Sample-8c573931


    Aaron
    MSDN Community Support | Feedback to us
    Develop and promote your apps in Windows Store
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    2012年12月4日 9:12
    版主