2015-06-08 1 views
-1

У меня есть объект TcpClient, который может подключаться к внешней программе. Я могу отправить одно сообщение (сериализованное сообщение xml). Но как только я закрываю свой сетевой поток, TcpClient закрывается и удаляется. И во второй раз, когда я пытаюсь отправить сообщение через мой TcpClient, я получаю сообщение об ошибке «не может получить доступ к размещенному объекту Net.Sockets.Socket».Используется ли TcpClient для одного соединения? Как отправить второе сообщение?

Я новичок в использовании TcpClient, но я был под впечатлением, что один раз подключился к другой программе, чтобы иметь возможность передавать сообщения назад и вперед для жизни моей программы и просто отключать TcpClient перед закрытием моей программы.

Единственный способ, которым я мог отправить несколько сообщений, - это если новый TcpClient и выполнить подключение еще до отправки моего сообщения. Является ли это правильным способом отправки нескольких сообщений, а мой менеджер и я просто под неправильным впечатлением от TcpClient?

Другое впечатление, что у меня было относительно TcpClient, было то, что после подключения я смог получать сообщения от другой программы. Таким образом, моя программа будет сидеть там ничего не делать, а затем получать сообщение TcpClient (определенное определенное xml-сообщение) с указанием инвентаря. Возможно ли это, или мне нужно настроить TcpListener для работы такого типа?



Пожалуйста, не позволяйте этому примеру путать вас или проблему, с которой я просто пытаюсь получить свое впечатление по-другому. Примером моего впечатления был телефонный разговор. TcpClient - это телефон, и я делаю соединение, позвонив по другому номеру телефона. Тогда я был бы связан и мог бы говорить взад-вперед. Могут быть паузы в течение нескольких минут, прежде чем один из нас снова запустит разговор. Затем в конце рабочего дня повесьте трубку.

Но после работы с TcpClient какое-то время у меня создается впечатление, что это разговор в рации. Я подключаюсь через TcpClient, который я нажимаю на кнопку walkie-talkie. Я говорю, и закрытие сетевого потока - это освобождение кнопки. Я могу услышать ответ от человека на другой стороне разговора, но как только я снова нажимаю кнопку, он меняет частоту, и это совершенно новый разговор, требующий от меня нового tcpClient.



EDIT

Все, что сказал, чтобы не закрыть поток был прав. Причина, по которой я продолжал закрывать поток, заключалась в том, что программное обеспечение получателя обработало мое сообщение. Но получающее программное обеспечение также искало сообщение, которое должно быть обернуто в символы ASCII STX и ETX. Если я завернул свое сообщение, отправлю его, и вот, они начали обрабатывать сообщение, пока мой поток все еще открыт.

+2

Не закрывайте поток. – john

+0

Если я не закрываю поток, другая программа, похоже, не знает, что сообщение отправлено и сидит там ничего не делает – Peacock

+1

Нет такой вещи, как сообщение. Это бесконечный безграничный поток байтов. У получателя есть ошибка. Не изменяйте отправителя, если у получателя есть ошибка. – usr

ответ

0

Все, кто сказал, что не закрывают поток, были прав.

Причина, по которой я продолжал закрывать поток, состояла в том, что получающее программное обеспечение обработало мое сообщение. Но получающее программное обеспечение также обрабатывало бы мое сообщение, если оно было завернуто в символы ASCII «STX» и «ETX».

Моя конечная проблема была небольшим невежеством в TcpClient и небольшим незнанием протоколов принимающего программного обеспечения.

 Смежные вопросы

  • Нет связанных вопросов^_^