Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
464 / 341 / 19
Регистрация: 26.05.2009
Сообщений: 2,696
1

Класс Socket

05.12.2010, 03:24. Показов 2147. Ответов 10
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте! Подскажите, если я, используя класс Socket, например, сначала отправлю '12', потом сразу же '56', не получится ли, что на другой сторону придут данные '1256' в одном вызове метода чтения? Данные как то изолируются или стоят во входящей очереди все подряд?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.12.2010, 03:24
Ответы с готовыми решениями:

Использование прокси при соединении с сервером по TCP. Класс Socket
Как реализовать использование прокси в клиенте, чтобы тот соединялся с сервером по TCP и по...

Socket C#
Подскажите где можно читать про socket C# или дайте реально работающий пример.

Only one usage of each socket...
Ошибка при вызове метода Socket.Connect: Only one usage of each socket address (protocol/network...

WebBrowser и JS socket
Собственно суть такая - есть адрес фрейма, прогрузив фрейм в компоненте WebBrowser происходит...

10
1274 / 975 / 113
Регистрация: 12.01.2010
Сообщений: 1,971
05.12.2010, 04:22 2
если отправлены подряд то придут сплошным куском, если задержка приличная(ну 20-30мс хотя бы) то можно отдельными блоками получить
0
464 / 341 / 19
Регистрация: 26.05.2009
Сообщений: 2,696
05.12.2010, 15:12  [ТС] 3
Не думал, что это зависит от времени. Я передаю информацию о файлах и так не хочется передавать размер передаваемых данных, потом сами данные. Неужели нет никакого способа отправлять не боясь, что на другой стороне данные придут одним куском?
0
139 / 137 / 21
Регистрация: 26.01.2010
Сообщений: 350
05.12.2010, 16:23 4
Не знаю, то ли это, о чём ты говоришь, но я в своё время делал так:

C#
1
2
3
4
5
6
                clientSocket = new TcpClient();
                clientSocket.Connect(ip, port);
                NetworkStream stream = clientSocket.GetStream();
                StreamWriter sw = new StreamWriter(stream);
                sw.WriteLine(UserName);
                sw.WriteLine(StateID);
И на стороне сервера примерно то же самое, только вместо writer'а использовать reader.
1
464 / 341 / 19
Регистрация: 26.05.2009
Сообщений: 2,696
05.12.2010, 20:34  [ТС] 5
То, но это ничего не дает ответ на вопрос. Чувствую, придется по старинке
0
970 / 773 / 171
Регистрация: 12.04.2009
Сообщений: 1,700
05.12.2010, 22:34 6
Отправляйте структуру:
C#
1
2
3
4
5
struct Packet
{
    public int Size;
    public byte[] data;
}
таким образом вы сможете отправлять много пакетов в в одном
1
_
2364 / 1243 / 78
Регистрация: 28.10.2009
Сообщений: 4,331
06.12.2010, 09:35 7
Не знаю, правильно ли я понял задание, но может ввести символ окончания сообщения, то есть например на стороне отправляющей стороны к сообщению добавлять, скажем, знак перевода строки, а принимающая сторона проверяет, если этот знак завершает сообщение, то данные выводятся, а следующие принятые данные будут выведены отдельно.
1
328 / 312 / 68
Регистрация: 05.11.2009
Сообщений: 712
06.12.2010, 09:43 8
при таком методе отправки вы всегда получите склеенный результат
так что для того чтобы получить два разных числа сервер в начале должен ответить, что получил первое число, а уж затем клиент должен прислать второе...
или пользуйтесь, как было сказано выше, передачей пакета содержащего всё...
1
464 / 341 / 19
Регистрация: 26.05.2009
Сообщений: 2,696
06.12.2010, 15:02  [ТС] 9
AlexDios, данный способ неплох, если передавать, например, текст, который набран с клавиатуры. Где уверены, что какой-то символ точно не попадется. Но если я буду, например, передавать данные с файла, то там абсолютно рэндомный набор символов.

Добавлено через 3 минуты
kuroiryuu, честно говоря, не совсем понял что делается в коде с пакетом. Если я сериализирую структуру - она ничем не будет отличаться от обычного массива байт. И мы возвращаемся к той же проблеме...
0
970 / 773 / 171
Регистрация: 12.04.2009
Сообщений: 1,700
07.12.2010, 00:04 10
отправляйте Си'шную строку, с нулевым символом в конце:
C#
1
string cstr = "string" + '\0';
Добавлено через 2 минуты
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// writer
public static void WriteCString(this BinaryWriter Writer, string text)
{
    Writer.Write(Encoding.UTF8.GetBytes(text));
    Writer.Write((byte)0);
}
// reader
public static string ReadCString(this BinaryReader reader, Encoding encoding)
{
    var bytes = new List<byte>();
    byte b;
    while ((b = reader.ReadByte()) != 0)
    {
        bytes.Add(b);
    }
    return encoding.GetString(bytes.ToArray());
}
2
464 / 341 / 19
Регистрация: 26.05.2009
Сообщений: 2,696
07.12.2010, 03:10  [ТС] 11
Но это опять же это подойдет если я пересылаю текст. Не иначе.
0
07.12.2010, 03:10
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.12.2010, 03:10
Помогаю со студенческими работами здесь

Socket подключения c#
Требуется создать socket подключения между моим компьютером и удаленным сервером по ip и порту. ...

Socket + Proxy
как используя proxy работать с socket. Ни поля ни метода установки proxy не нашол. Подскажите как...

raw socket
Добрый вечер, надо написать генератор tcp пакетов, возник вопрос: на msdn написано что если в при...

Socket
Привет всем ! Подскажите где ошибка : static Socket socket = new...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru