Синхронизация потоков и приостановка потоков \ Возобновление - PullRequest
1 голос
/ 19 декабря 2009

Я пытаюсь отправить файлы с локального на FTP, для этого я блокирую TCPClient перед отправкой файла. И эта отправка файла происходит в другом потоке. Чтобы основной поток не пострадал.

Как и когда я пытаюсь использовать заблокированный TCPClient перед разблокировкой, он зависает. Итак, как мне поступить, чтобы одновременно я мог отправить файл и получить файл (обе функции находятся в разных потоках, но блокируют один и тот же объект TCPClient).

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

Пожалуйста, помогите, я потерян в темах.

Ответы [ 2 ]

2 голосов
/ 19 декабря 2009

Не следует использовать один и тот же TcpClient из разных потоков для выполнения разных задач - он представляет собой одно соединение, поэтому данные, отправляемые и получаемые в двух разных потоках, будут мешать друг другу. (Даже если вы «отправляете» файл в одном и «получаете» файл в другом, оба должны будут отправить и получить данные.)

Я предлагаю вам использовать два разных TcpClient экземпляра.

0 голосов
/ 07 марта 2011

TCP - это двунаправленный протокол. Даже если вы получаете файл, вы все время отправляете подтверждение. Это означает, что TCP работает в контексте : есть один конец получателя и один конец отправителя.

Вы не должны смешивать роли внутри экземпляра. Используйте 2 разных экземпляра. Они могут работать параллельно.

...