Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.137.218.230] |
|
Сообщ.
#1
,
|
|
|
Здрасьте, господа-специалисты.
Делаю FTP-сервер. Для тестирования использую клиент с отоброжением полученных и отправленных сообщений. Ну так вот, проблема в передаче сообщений от сервера к клиенту. Когда клиент присоединяется к серверу, то сервер ему должен послать сообщение с кодом 220. Но суть не в этом. Посылку сообщений я сначала выполнял через TcpClient. Т.е. брал оттуда Stream, делал на его основе StreamWriter, а потом писал в него, но клиент всёравно ничего не получал, пока я не закрывал StreamReader методом Close(). Но при вызове Close() закрвается не только этот поток (StreamReader), но и тот, на основе которого он зделан (Stream). Это вызывает дисконнект в TcpClient'е. Таким образом можно было отправить сообщение только если после отправки прервать соединение Далее я решил использовать Socket. Т.е. теперь когда TcpListener обнаруживал подключающегося клиента, то выдавал не TcpClient'а, а Socket. Но отсылка сообщений с помощью метода Socket.Send() ничего не дало. Теперь клиент от моего сервера вобще ничего не получает, даже при разрыве соединения Хотя метод отробатывает без ошибок. Для выяыления ошибки я зделал маленькую прогу, которая вместо FTP-клиента бы сидела на 21 порту и ловила сообщения. Ну так вот она всё прекрассно получает Так что я даже незнаю в чём косяк!! Буду очень рад любой помощи Добавлено Да, кстати, если кто-нибудь более простойспособ создания FTP-сервера, чем писать его всего ручками, буду очень благодарен. А то в инете тока про клиентов пишут |
Сообщ.
#2
,
|
|
|
Для того чтобы не закрывался нижележащий поток я использую спецкласс потока:
class UnclosableStream<T>:T where T:Stream{ public override void Close() {} public void RealClose(){base.Close();} } |
Сообщ.
#3
,
|
|
|
Ну как же так, так же не должно быть!!! Как же зделать тогда например чат??! Что, специально создавать такой класс??!! Это же неправильно! Я в АУТЕ!!!
|
Сообщ.
#4
,
|
|
|
Проблема решена. Дело было в том, что по протоколу FTP, каждое сообщение от клиента к серверу и обратно должно заканчиваться символами перевода коретки на начало строки и перехода на новую строку - "\r\n" Вот этот момент-то я и упустил. Поэтому FTP-клиент на получал сообщений от сервера, потомоу что ждал этих символов, а моя самодельная прога, отлавливающая сообщения на 21 порту - поймала.
Так что вот так, спасибо за внимание |