4 / 4 / 3
Регистрация: 07.12.2009
Сообщений: 62
|
|||||||||||
1 | |||||||||||
Передача значений переменных через сокет16.04.2012, 19:18. Показов 10690. Ответов 20
Метки нет (Все метки)
Добрый всем вечер. Вопрос: имеется клиент, он должен передать серверу 4 переменных. Сервер должен распознать эти 4 переменных отдельно, т.е не единым массивом, а как 4 переменные. Как это добиться?
Максимум, что у меня получалось нормально принять - это раздельных 2 переменных, если больше то они склеивались с остальными.
0
|
16.04.2012, 19:18 | |
Ответы с готовыми решениями:
20
Передача значений переменных или ссылок, неконтролируемое изменение переменных Передача файла через сокет Неккоректная передача значений глобальных переменных Передача значений переменных через URL |
98 / 98 / 46
Регистрация: 21.03.2012
Сообщений: 378
|
|||||||||||
17.04.2012, 00:10 | 2 | ||||||||||
Зачем на сервере 2 бесконечных цикла?
я выложу геморный пример, так как по другому не знаю там использую "спец символ" для опознания текста, твоя строки (string n = "3"; //переменные которые нужно передать string lambda = "4,8"; string mu = "2"; string nt = "1000"; ) собираем в одну строку n и разделяем спец символом string n = "3;4,8;2;1000;"; данным спец символом является ";", ну и отправляем на сервер, там разбираем строку
2
|
(x(x_(x_x(О_о)x_x)_x)x)
64 / 56 / 6
Регистрация: 04.09.2010
Сообщений: 301
|
|||||||||||
17.11.2012, 17:03 | 3 | ||||||||||
Всем привет.Новую тему решил не создавать - задам вопрос тут.
Почему вешает приложение?
0
|
17689 / 12874 / 3366
Регистрация: 17.09.2011
Сообщений: 21,138
|
|
17.11.2012, 19:04 | 4 |
Привет.
Потому что метод Accept блокирует текущий поток до тех пор, пока клиент не подключится. Чтобы не вешался основной поток, запускайте метод handler в отдельном.
0
|
464 / 341 / 19
Регистрация: 26.05.2009
Сообщений: 2,696
|
|||||||||||
18.11.2012, 05:52 | 5 | ||||||||||
Fourd, зачем всё так усложнять? В .net всё уже придумано до нас
Добавлено через 31 минуту Клиент (отправляем строки):
Добавлено через 4 минуты Или используйте асинхронный вариант.
2
|
Fourd
|
20.11.2012, 18:02
#6
|
Не по теме: body90, не знаю на тот момент показалось что так будет проще, так как сам только учил, для задачи дипломки :)) да и честно говоря, всю причину не припомню...
0
|
98 / 81 / 16
Регистрация: 14.01.2011
Сообщений: 438
|
|
21.11.2012, 10:08 | 7 |
Fourd, у spprog первый цикл для принятия клиентов,второй - "бесконечный" для полного считывания сообщения - завершается по окончанию его(сообщения). А так у автора была просто конкатенация строк,поэтому не удавалось нормально передать. Можно через пробелы передавать,и на сервере парсить.
1
|
464 / 341 / 19
Регистрация: 26.05.2009
Сообщений: 2,696
|
|
21.11.2012, 15:52 | 8 |
Ну да, а если в строке будет пробел? Что делать? Разделителями пользоваться - не лучшая практика.
Тут 2 варианта: 1) отправлять сначала длину строки, а потом саму строку; 2) отправлять/получать с помощью BinaryWriter/BinaryReader (он сам использует первый способ), как я показал выше. Думаю, понятно, что 2-й вариант поудобшее.
1
|
98 / 81 / 16
Регистрация: 14.01.2011
Сообщений: 438
|
|
21.11.2012, 19:05 | 9 |
body90, да,конечно ваш вариант намного удобнее. Просто и с самими сокетами(напрямую) тоже надо поиграться хоть раз ).
0
|
464 / 341 / 19
Регистрация: 26.05.2009
Сообщений: 2,696
|
|
22.11.2012, 01:43 | 10 |
Согласен. Ну тогда один вариант... Сначала отправлять, например, 1 байт с числом, означающим длину передаваемой строки, а потом передавать эту строку.
0
|
98 / 81 / 16
Регистрация: 14.01.2011
Сообщений: 438
|
|
22.11.2012, 18:40 | 11 |
0
|
(x(x_(x_x(О_о)x_x)_x)x)
64 / 56 / 6
Регистрация: 04.09.2010
Сообщений: 301
|
||||||
02.12.2012, 22:37 | 12 | |||||
И снова вопрос:
Сообщения на сервер приходят исправно.Вот код:
0
|
464 / 341 / 19
Регистрация: 26.05.2009
Сообщений: 2,696
|
||||||
04.12.2012, 12:23 | 13 | |||||
1
|
(x(x_(x_x(О_о)x_x)_x)x)
64 / 56 / 6
Регистрация: 04.09.2010
Сообщений: 301
|
||||||
23.12.2012, 15:05 | 14 | |||||
Разобрался, но это сообщение не получает клиент, подскажите что не так:
Вопрос еще актуален....
0
|
464 / 341 / 19
Регистрация: 26.05.2009
Сообщений: 2,696
|
|
23.12.2012, 20:06 | 15 |
Народ жаждет больше кода!
В общем, покажите полностью как вы создавали объекты s, endPoint, ...
0
|
(x(x_(x_x(О_о)x_x)_x)x)
64 / 56 / 6
Регистрация: 04.09.2010
Сообщений: 301
|
||||||
23.12.2012, 20:14 | 16 | |||||
переменные ip и port парсятся из текстбоксов главной формы
mtd - int'овое число,task - строка, которую нужно потом передать.
0
|
464 / 341 / 19
Регистрация: 26.05.2009
Сообщений: 2,696
|
|
23.12.2012, 23:11 | 17 |
А код на другой стороне сокета можно увидеть?
0
|
(x(x_(x_x(О_о)x_x)_x)x)
64 / 56 / 6
Регистрация: 04.09.2010
Сообщений: 301
|
||||||
23.12.2012, 23:19 | 18 | |||||
0
|
464 / 341 / 19
Регистрация: 26.05.2009
Сообщений: 2,696
|
|
24.12.2012, 10:31 | 19 |
Использовать порты ниже 1024 не феншуйно.
А вы точно выставляете одинаковые порты на сервере и клиенте? Запускаете оба приложения на одном компьютере? В трассировщике смотрели происходит ли коннект?
0
|
(x(x_(x_x(О_о)x_x)_x)x)
64 / 56 / 6
Регистрация: 04.09.2010
Сообщений: 301
|
|
24.12.2012, 12:09 | 20 |
клиент нормально коннектится к серверу и присылает ему сообщение после чего сервер удачно выводит его в поле лога,потом по Вашей рекомендации я отправляю ответ клиенту методом Send,который уходит нормально, но клиент его не получает.склоняюсь к тому, что я пропустил важную строчку,которая позволяет клиенту поймать поток байт...
Добавлено через 38 минут P.S. Пока вообще не используются, будут использоваться потом, сейчас главное добиться передачи сообщений в обе стороны
0
|
24.12.2012, 12:09 | |
24.12.2012, 12:09 | |
Помогаю со студенческими работами здесь
20
Передача структуры через сокет Передача hbitmap через сокет Передача массива через сокет Передача массива через сокет Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |