TcpClient是单一连接使用吗?如何发送第二条消息?

时间:2015-06-08 14:59:45

标签: c# sockets tcpclient

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

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

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

我对TcpClient的另一个印象是,一旦连接,我就能够从其他程序接收消息。因此,我的程序将坐在那里什么也不做,然后收到一条TcpClient消息(一些定义的xml消息),说明库存已被更改。这是可能的还是我需要为这种类型的功能设置TcpListener才能工作?



请不要让这个例子让您感到困惑或问题我只是试图以不同的方式给我留下印象。 我的印象就是电话交谈。 TcpClient是电话,我通过拨打另一个电话号码建立连接。然后我会连接起来,能够来回交谈。在我们其中一个人重新开始谈话之前,可能会有几分钟的停顿。然后在工作日结束时挂断电话。

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



修改

每个说不关闭流的人都是对的。我继续关闭流的原因是因为接收器软件会处理我的消息。但接收软件也在寻找包含在ASCII STX和ETX字符中的消息。如果我把我的信息包裹起来,就把它发送出去,看看他们开始处理这条信息,我的信息流仍然打开。

1 个答案:

答案 0 :(得分:1)

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

我一直关闭流的原因是因为接收软件会处理我的消息。但是如果接收软件包含在ASCII“STX”和“ETX”字符中,它也会处理我的消息。

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