Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Распределённые приложения и сеть > Передача строк по сети


Автор: xbarmaglot 23.5.2013, 20:14
Есть TCP соединение. Для передачи данных использую StreamReader.ReadLine и StreamWriter.WriteLine.
Но при передачи данных они могут не все быть переданы. Передаются строки.

1. ReadLine и WriteLine гарантируют ли передачу данных, пока не будет конца строки, чтоб не крутить 
цикл для передачи всех данных ?

При передачи строк они передаются в unicode. Если кодировать в UTF8, то получаю массив байт, который нельзя 
передать как строку.

2. Можно ли как передать массив байт используя WriteLine?
3. ReadLine возвращает строку. Если по сети идут данные в UTF8, a не unicode, то корректно ли отработает ReadLine ?

Автор: jonie 20.6.2013, 09:02
в сети нет строк. Есть байты. Их и передавайте в нужной вам кодировке и нужным способом закодированные, например: сначала посылаете int - сколько байт передается, потом собственно байты в указанном количестве. На принимающей стороне собираете строку самостоятельно из полученных байт (да, крутите цикл чтения).
Вот как из utf-8 и в utf-8 перегнать строку:
Код

byte[] bytes = Encoding.Default.GetBytes(myString);
myString = Encoding.UTF8.GetString(bytes);

Автор: xbarmaglot 20.6.2013, 09:57
jonie, а разве WriteLine и ReadLine Не будут читать данные, пока не конец завершения строки ?

Автор: jonie 20.6.2013, 10:15
А что такое конец строки в сети ? Вы сами должны кодировать сетевые сообщения и сами должны понимать что они из себя представляют. По сети передаются байты - нет там и никогда не было строк.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)