Сетевое программирование
Нашел в интернете пример Клиент-Сервера.
Все работает, понял как работает подключение к серверу, но не знаю как делать проверку на подключение =) Код сервера |
Ответ: Сетевое программирование
Отличная статья по клиент-серверу на C#: http://msdn.microsoft.com/ru-ru/library/dd335942.aspx
|
Ответ: Сетевое программирование
Цитата:
Статья для профессионалов, я к ним не отношусь, к сожалению... |
Ответ: Сетевое программирование
Цитата:
|
Ответ: Сетевое программирование
Цитата:
|
Ответ: Сетевое программирование
Сервер передает байты, строка не байты а символы. Чтобы получить байты из строки, надо преобразовать строку какой-то кодировкой в байты. В твоем примере эта кодировка ASCII.
|
Ответ: Сетевое программирование
|
Ответ: Сетевое программирование
а где функция Connected, которой предназначен мессадж? или ты просто забыл перед SendMessage написать client: client.SendMessage(connect )
|
Ответ: Сетевое программирование
|
Ответ: Сетевое программирование
Значит есть код
Код:
static void Main(string[] args) |
Ответ: Сетевое программирование
вероятно надо выполнить отправку перед строкой
PHP код:
|
Ответ: Сетевое программирование
Цитата:
|
Ответ: Сетевое программирование
Ты ещё не начал сетевого программирования, а уже "сложно"..
|
Ответ: Сетевое программирование
Товарищи, подскажите: имеется простенький клиент. В цикле вызывается readSocket(), для проверки доступных данных для чтения используется NetworkStream.DataAvailable. Читать данные удобнее именно строками, но для этих целей явно не подходит DataAvailable - иногда данные "висят" до следующей строки (одна строчка прочиталась из потока, DataAvailable сбросилось, следующая строка не читается пока новая не придет).
Гуглил, но решения именно с ReadLine() не нашел, может кто подскажет как по другому сделать проверку на пришедшие данные? PHP код:
|
Ответ: Сетевое программирование
Цитата:
|
Ответ: Сетевое программирование
Можно твою функцию чтения сделать асинхронной - завернуть в обёртку, тогда получение не будет блокировать прогу.
Код:
static public async Task Boolean readSocket() |
Ответ: Сетевое программирование
Блокировка не важна. Вопрос чем заменить DataAvailable - например пришло сразу две строки, одну прочитали, DataAvailable сбросилось, вторая будет висеть и не прочитается пока не придет что-нибудь еще...
Что-то мне подсказывает, что от ReadLine() придется отказаться.:) |
Ответ: Сетевое программирование
Можно так: читать сокет в отдельном потоке в цикле. прочитанные строки отправлять в обработчик EventHandler.
Код:
public EventHandler<string> OnReadLine; Код:
socketWrapper.OnReadLine += (sender, args) => { отправку данных можно тоже делать в отдельном потоке, выгребая все команды из списка-на-отправку. |
Ответ: Сетевое программирование
Проблема вероятнее в том, что сервер не отправляет данные строки.
Попробуй установить на обоих сторонах вот этот флаг в True: https://msdn.microsoft.com/ru-ru/lib...vs.110).asp x |
Ответ: Сетевое программирование
Если как ты написал "блокировка не важна", то вся эта хрень с DataAvailable вообще не нужна.
Код:
var ns = tcpClient.GetStream(); Если тебе нужно асинхронно принимать данные по сети и "делить на строки", то подход нужен совсем другой - 1 поток просто всегда читает данные из tcpClient и записывает в буффер, 2 поток (можно и в основном), читает данные из буффера и делит на строки, если там какой-то кусок "неполный", то его надо оставить в буффере до тех пор пока остальное не придет. На самом деле и чтение из потока и обработку данных можно тоже в одном потоке делать, просто так делать не принято (хоть и будет работать) |
Ответ: Сетевое программирование
Всем спасибо.
В итоге сделал так, вроде работает без ошибок: :) PHP код:
|
Часовой пояс GMT +4, время: 20:14. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot