TcpClient是否使用单个连接?我怎么发送第二条信息



我有一个TcpClient对象,可以连接到一个外部程序。我可以发送一条消息(xml序列化消息)。但是一旦我关闭我的网络流,我的TcpClient关闭并处理。第二次我尝试通过TcpClient发送消息时,我得到一个错误"无法访问已处置的对象,Net.Sockets.Socket"。

我是使用TcpClient的新手,但我的印象是我会与其他程序连接一次,然后能够在我的程序的生命周期内来回传递消息,并在关闭程序之前简单地断开TcpClient。

我能够发送多个消息的唯一方法是,如果我新建 TcpClient,并在发送我的消息之前再次执行连接。这是发送多个消息的正确方式,我的经理和我只是在TcpClient的错误印象下?

我对TcpClient的另一个印象是,一旦连接,我就可以从其他程序接收消息。因此,我的程序将坐在那里不做任何事情,然后接收TcpClient消息(一些定义的xml消息),说明库存已更改。这是可能的吗?还是我需要设置一个TcpListener来实现这种类型的功能?



请不要让这个例子迷惑了你或问题,我只是想用另一种方式表达我的印象。我印象中的一个例子是一次电话交谈。TcpClient是电话,我通过呼叫另一个电话号码建立连接。然后我就可以连接起来,可以来回交谈。在我们中的一个人重新开始谈话之前,可能会有几分钟的停顿。然后在一天工作结束时挂断电话。

但是在使用TcpClient一段时间后,我得到的印象是它是一个对讲机对话。我通过TcpClient连接,这是我按对讲机按钮。我说话,网络流的关闭就是我释放按钮。我可以听到对话另一边的人的回复,但是一旦我再次按下按钮,它就会改变频率,这是一个全新的对话,要求我新的 tcpClient。



编辑

说不要关闭流的人都是对的。我一直关闭信息流的原因是接收软件会处理我的信息。但是接收软件也在寻找用ASCII STX和ETX字符包装的消息。如果我包装我的消息,发送它,你看,他们开始处理消息,我的流仍然打开。

每个说不要关闭流的人都是对的。

我一直关闭流的原因是接收软件会处理我的消息。但是接收软件也会处理我的消息,如果它被包装在ASCII"STX"one_answers"ETX"字符。

我的最终问题是对TcpClient和接收软件的协议有一点无知。

最新更新