【问题标题】:How to get the stream from StreamSocket如何从 StreamSocket 获取流
【发布时间】:2012-04-26 21:36:32
【问题描述】:

我正在开发 Metro Client-Server 应用程序,并在客户端中使用 StreamSocket 连接到侦听服务器。然后我尝试使用 StreamWriter 将数据发送到服务器。问题是当我创建新的 StreamWriter 对象时,我需要给他一个流参数。在我的情况下,我需要给他来自 StreamSocket 的流。这就是我要说的:

   private StreamWriter swSender;


   private StreamSocket tcpServer;

尝试发送数据时:

   swSender = new StreamWriter(????);
   swSender.WriteLine(mytext);
   swSender.Flush();

????必须是来自 tcpServer 的 Stream,但没有像旧框架中的 TcpClient() 类中的 GetStream() 方法。任何解决方法?有任何想法吗?提前谢谢你。

【问题讨论】:

    标签: c# sockets client-server streamwriter .net-4.5


    【解决方案1】:

    如果我没记错的话,他有 InputStreamOutputStream

    然后

    async private void WaitForData(StreamSocket socket)
    {
     var dr = new DataReader(socket.InputStream);
     //dr.InputStreamOptions = InputStreamOptions.Partial;
     var stringHeader = await dr.LoadAsync(4);
     if (stringHeader == 0)
     {
        // disconnected
        return;
     }
    
     int strLength = dr.ReadInt32();
     uint numStrBytes = await dr.LoadAsync((uint)strLength);
     string msg = dr.ReadString(numStrBytes);
     WaitForData(socket);
    }
    

    编辑

    所以你需要这样的东西

    IBuffer buffer = CryptographicBuffer.ConvertStringToBinary(text,   BinaryStringEncoding.Utf8);
    tcpServer.OutputStream.WriteAsync(buffer);
    

    【讨论】:

    • 感谢您的回答,但在您的代码中,您正在等待服务器的响应,然后客户端从服务器获取消息。我的问题与客户端向服务器发送信息的情况更相关。这就是我尝试使用 StreamWriter 的原因。
    • dr.ReadInt32() 返回一个巨大的数字并以 OutOfMemoryException 结束
    • @EfEs 你想做什么?
    • 您从哪里得到“OutOfMemoryException”?在“加载异步”中?为什么你不使用'while'?
    • 否,在字符串 msg = dr.ReadString(numStrBytes) 中,要读取的字节数太高,像 8000 万。
    【解决方案2】:

    你可以使用这样的东西(正确处理)

    Starting streamreader and writer for tcpclient

    【讨论】:

      猜你喜欢
      • 2016-03-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-08
      • 1970-01-01
      • 1970-01-01
      • 2022-07-20
      • 2020-11-27
      相关资源
      最近更新 更多