【问题标题】:Create StreamSocket to send TCP messages to different IP Address and issue on dispose the StreamSocket创建 StreamSocket 以将 TCP 消息发送到不同的 IP 地址并在处理 StreamSocket 时发出
【发布时间】:2015-12-12 01:20:18
【问题描述】:

我正在为需要 TCP 通信的 Windows 10 开发通用应用程序,为此我创建了一个通用类库,其中一个名为 TCPCom 的类实现了 IDisposable 接口。 TCPCom 有一个 send 方法,它有以下代码。 TCPCom 类的 Dispose 方法释放 StreamSocket 对象。

public async Task Send(string ipAddress, string port)
{
    try
    {
        //The server hostname that we will be establishing a connection to. We will be running the server and client locally,
        //so we will use localhost as the hostname.
        HostName serverHost = new HostName(ipAddress);
        if (talkerSocket == null)
        {
            //Every protocol typically has a standard port number. For example HTTP is typically 80, FTP is 20 and 21, etc.            
            talkerSocket = new StreamSocket();
            await talkerSocket.ConnectAsync(serverHost, port);
            IsConnected = true;
        }

        //Write data to the echo server.
        Stream streamOut = talkerSocket.OutputStream.AsStreamForWrite();
        StreamWriter writer = new StreamWriter(streamOut);
        await writer.WriteLineAsync("test message");
        await writer.FlushAsync();
    }
    catch (Exception ex)
    {
        //invoke error event
        OnErrorOccurred(this, new ErrorEventArgs(ex));
    }
}

所以在通用应用程序中的表单上,我将 TCPCom 的一个对象声明为全局变量,并且在发送按钮单击事件处理程序上,我正在创建新对象并调用发送方法。如果 Send 方法发生错误,则 send 方法会捕获异常并在表单上引发事件。

现在我不知道在哪里处置 TCPCom 对象,谁能指出正确的方向以便以适当的方式关闭/处置 TCPCom 对象。

【问题讨论】:

    标签: c# win-universal-app stream-socket-client


    【解决方案1】:

    像这样使用 DataWriter:

    Stream streamOut = talkerSocket.OutputStream;
    DataWriter writer = new DataWriter(streamOut);
    writer.WriteString("test message");
    await writer.StoreAsync();
    writer.Detach();
    

    重要的是 writer.Detach。如果您不分离,则在处置 writer 时处置 OutputStream。

    【讨论】:

      猜你喜欢
      • 2019-03-23
      • 1970-01-01
      • 1970-01-01
      • 2013-06-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-09
      • 2016-05-12
      相关资源
      最近更新 更多