创建StreamSocket以将TCP消息发送到不同的IP地址,并在处理StreamSocket时发出问题

本文关键字:StreamSocket 地址 处理 出问题 IP 消息 TCP 以将 创建 | 更新日期: 2023-09-27 18:26:30

我正在为Windows 10开发通用应用程序,该应用程序需要TCP通信,为此我创建了一个通用类库,其中包含一个名为TCPCom的类,该类实现IDisposable接口。TCPCom有一个发送方法,该方法有以下代码。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对象。

创建StreamSocket以将TCP消息发送到不同的IP地址,并在处理StreamSocket时发出问题

这样使用DataWriter:

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

重要的是作家。拆卸如果您不分离,那么在释放编写器时将处理OutputStream。