Показать сообщение отдельно
Старый 27.11.2015, 02:35   #15
Andvrok
Бывалый
 
Регистрация: 26.07.2009
Сообщений: 785
Написано 362 полезных сообщений
(для 995 пользователей)
Ответ: Сетевое программирование

Сообщение от DStalk Посмотреть сообщение
Товарищи, подскажите: имеется простенький клиент. В цикле вызывается readSocket(), для проверки доступных данных для чтения используется NetworkStream.DataAvailable. Читать данные удобнее именно строками, но для этих целей явно не подходит DataAvailable - иногда данные "висят" до следующей строки (одна строчка прочиталась из потока, DataAvailable сбросилось, следующая строка не читается пока новая не придет).
Гуглил, но решения именно с ReadLine() не нашел, может кто подскажет как по другому сделать проверку на пришедшие данные?

tcp_socket = new TcpClient(hostport);
            
net_stream tcp_socket.GetStream();
socket_writer = new StreamWriter(net_stream);
socket_reader = new StreamReader(net_stream);

static public 
Boolean readSocket()
{
    if (
net_stream.DataAvailable) {
        
tcp_packet socket_reader.ReadLine();
        
//Тут обработка
        
return true;
    }
    return 
false;

Не совсем понял задачу. Я обычно пользуюсь не ридером, а BeginRead/BeginReadAsync стрима. В колбэке смотришь количество полученных байт - если больше нуля, то в стриме что-то есть.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
DStalk (27.11.2015)