Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.77/13: Рейтинг темы: голосов - 13, средняя оценка - 4.77
20 / 20 / 4
Регистрация: 31.10.2010
Сообщений: 1,240
Записей в блоге: 2

Switch не распознает команды полученные с TcpClient

06.02.2012, 14:04. Показов 2625. Ответов 28
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день.
Есть 2 класса в первом TcpListener слушает TcpClient-а client:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
 void lockConnect()
        {
            try
            {
                while (true)
                {
                    Stream readerStream = client.GetStream();
                    byte[] buf = new byte[1024];
                    String responseData = String.Empty;
                    Int32 bytes = readerStream.Read(buf, 0, buf.Length);
                    responseData = System.Text.Encoding.UTF8.GetString(buf, 0, bytes);
                    int index = responseData.Length;/////USER
                    if (index > 0)
                    {
                      
                        handler.GiveKom(responseData);
                    }
                }
            }
            catch
            {
 
                //server_on = false;
            }
        }
и отсылает в метод другого класса:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
 public void GiveKom(string Kom)
        {
            switch (Kom)
            {
                case "лед":  iceBall.GoIceUs2(form.User2Position); 
                    break;
                case "огонь": fire.GoFireUs2(form.User2Position);
                    break;
                case "щит": shield.GoShieldUs2(form.User2Position);
                    break;
                default: SendKom("лед"); break;
            }
        }
Ставлю отладку (точку). Показывает, что слова правильные приходят (на длину их тоже проверял), а команды не выполняет(((
Подскажите пожалуйста....
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
06.02.2012, 14:04
Ответы с готовыми решениями:

Не распознаёт многие команды
Microsoft Visual 2013 не распознаёт команды Count,int,cin и прочие. Мне подсказали добавить #include "stdafx.h",не помогло. Не...

Чтение СМС через АТ команды (не распознаёт кириллицу)
Здравствуйте. Пишу програмули, которая должна уметь отправлять и читать СМСки. Подключил USB модем, вставил в него симку и начал...

Не распознает родные команды после манипуляций с разными копиями Windows
"Моя-твоя-не понимать!" (читать с акцентом, однака) Есть проблемный комп(ХР). Поверх старой ХР была установлена новая ХР (без...

28
 Аватар для Димон_
136 / 104 / 9
Регистрация: 30.01.2011
Сообщений: 699
06.02.2012, 16:44
ты вместо парсера попробуй тупо на экран выводить входящий текст, если нужный, то проблема в реализации команд, а не сетевого взаимодействия
1
20 / 20 / 4
Регистрация: 31.10.2010
Сообщений: 1,240
Записей в блоге: 2
06.02.2012, 16:55  [ТС]
Димон_, Я вызвал пришедший текст в MessageBox, все в порядке((( Приходит то-что надо.
Тестил метод по разному, в TextBox писал "лед" например, на кнопку передавал его в мой метод. Там все работает безупречно.
Может кодировка меняется при передаче, я не знаю что еще и предположить...
0
 Аватар для Димон_
136 / 104 / 9
Регистрация: 30.01.2011
Сообщений: 699
06.02.2012, 16:59
Значит у тебя проблема здесь на месте уже, в парсере.
Пробуй реагировать к примеру messboxом на какое-нибудь сообщение, если реагирует, то у тебя проблема в методах <<другого класса>>
1
20 / 20 / 4
Регистрация: 31.10.2010
Сообщений: 1,240
Записей в блоге: 2
06.02.2012, 17:01  [ТС]
Я и вызывал MessBox перед самым свичем в методе.
0
 Аватар для Димон_
136 / 104 / 9
Регистрация: 30.01.2011
Сообщений: 699
06.02.2012, 17:03
Цитата Сообщение от Костяныч Посмотреть сообщение
Я и вызывал MessBox перед самым свичем в методе.
Свич твой работает, он блин не может не работать!
а вот по поводу
C#
1
iceBall.GoIceUs2(form.User2Position);
могу сомневаться
1
06.02.2012, 17:03
Лучший ответ Сообщение было отмечено как решение

Решение

Не по теме:

Может Свитч перегорел? ))

3
 Аватар для Димон_
136 / 104 / 9
Регистрация: 30.01.2011
Сообщений: 699
06.02.2012, 17:04
C#
1
2
3
4
Не по теме:
 Может Свитч перегорел? ))
надо на if - else if
менять)
1
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
06.02.2012, 17:08
Цитата Сообщение от Костяныч Посмотреть сообщение
Ставлю отладку (точку). Показывает, что слова правильные приходят
Ставьте "точку" непосредственно в блоках case и смотрите, заходит ли в какой-нибудь.

Цитата Сообщение от Костяныч Посмотреть сообщение
C#
1
default: SendKom("лед"); break;
Кстати, вместо рекурсии здесь можно довольно красиво использовать нелюбимый многими goto:
C#
1
default: goto case "лед"; break;
1
20 / 20 / 4
Регистрация: 31.10.2010
Сообщений: 1,240
Записей в блоге: 2
06.02.2012, 17:15  [ТС]
Сейчас if-else попробую. Что смешно-то
Цитата Сообщение от Димон_ Посмотреть сообщение
а вот по поводу
Код C#
1
iceBall.GoIceUs2(form.User2Position);
могу сомневаться
я напрямую из ТекстБокса слова отсылаю в функцию, все работает (т.е. iceBall.....работает). А сообщения с сети не рабочие.

Добавлено через 5 минут
kolorotur, ставлю точку на против
Цитата Сообщение от Костяныч Посмотреть сообщение
case "лед": *iceBall.GoIceUs2(form.User2Position);
туда заходит, но не выполняет.

Добавлено через 42 секунды
Цитата Сообщение от kolorotur Посмотреть сообщение
default: SendKom("лед"); break;
Это я так извращался, проверял как мог)
0
774 / 554 / 80
Регистрация: 03.07.2011
Сообщений: 1,020
06.02.2012, 17:17
Цитата Сообщение от kolorotur Посмотреть сообщение
Кстати, вместо рекурсии здесь можно довольно красиво использовать нелюбимый многими goto:
kolorotur, А так не проще ?
C#
1
2
3
4
5
6
7
8
9
10
11
public void GiveKom(string Kom)
        {
            switch (Kom)
            {
                case "огонь": fire.GoFireUs2(form.User2Position);
                    break;
                case "щит": shield.GoShieldUs2(form.User2Position);
                    break;
                default:  iceBall.GoIceUs2(form.User2Position);  break;
            }
        }
Правда еще не известно куда это он посылает
C#
1
SendKom("лед"); break;
и придет ли оно в
C#
1
GiveKom(string Kom)
1
20 / 20 / 4
Регистрация: 31.10.2010
Сообщений: 1,240
Записей в блоге: 2
06.02.2012, 17:37  [ТС]
Сделал так:
C#
1
2
3
4
5
6
 if (Kom == "лед") iceBall.GoIceUs2(form.User2Position); 
            else
                if (Kom == "огонь") fire.GoFireUs2(form.User2Position);
                else
                    if (Kom == "щит") shield.GoShieldUs2(form.User2Position);
                    else { MessageBox.Show("Text " + Kom);}
Если приходит слово "лед" то вообще никаких действий, даже бокс со словом не появляется. А если я туда же просто с кнопки посылаю "лед" то все работает.
Согласитесь, если слово не нашло своего блезница, то оно хоть как должно в боксе появиться....дак его и там нет, хотя я "точкой красной" проверял. Слово есть и длину его я могу тут же определить.

Добавлено через 6 минут
Цитата Сообщение от Vitall Посмотреть сообщение
Правда еще не известно куда это он посылает
Код C#
1
SendKom("лед"); break;
и придет ли оно в
Код C#
1
GiveKom(string Kom)
это аналогичная функция, только для ввода из ТекстБокса. Короче, GiveKom - это то, что мы получаем. SendKom- то, что посылаем на другой конец сети. Не в этом суть.

Добавлено через 9 минут
А может такое происходить если прослушку сообщения (т.е.
Цитата Сообщение от Костяныч Посмотреть сообщение
void lockConnect()
) я в другой поток засунул чтобы программа не висла пока TcpListener ждет sms. А
Цитата Сообщение от Костяныч Посмотреть сообщение
public void GiveKom(string Kom)
в главном потоке как был, так и рисовал там?
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
06.02.2012, 17:40
Цитата Сообщение от Vitall Посмотреть сообщение
А так не проще?
Ну если вам нравится китайский подход (дублирование кода везде где можно), то конечно проще.
Особенно глаза резать начинает, если там не одна строчка, а 3-4.

Костяныч, если есть возможность, то можете прицепить весь проект. Ошибка найдется за 15 минут.
1
20 / 20 / 4
Регистрация: 31.10.2010
Сообщений: 1,240
Записей в блоге: 2
06.02.2012, 17:45  [ТС]
Ребят, кому интересно, не смейтесь если сочтете какие-то подходы моего программирования лишними или смешными.)
Вложения
Тип файла: rar Battle.rar (839.1 Кб, 14 просмотров)
0
20 / 20 / 4
Регистрация: 31.10.2010
Сообщений: 1,240
Записей в блоге: 2
06.02.2012, 17:47  [ТС]
Там внизу ТекстБокс для ввода команд "огонь" "лед" "щит".
0
774 / 554 / 80
Регистрация: 03.07.2011
Сообщений: 1,020
06.02.2012, 18:22
Цитата Сообщение от kolorotur Посмотреть сообщение
Ну если вам нравится китайский подход (дублирование кода везде где можно), то конечно проще.
Особенно глаза резать начинает, если там не одна строчка, а 3-4.
Ну насколько я понял китайский код это что типо этого http://code-wtf.livejournal.com/160720.html ))
А где дублирование в моем примере так и не понял
0
20 / 20 / 4
Регистрация: 31.10.2010
Сообщений: 1,240
Записей в блоге: 2
06.02.2012, 18:27  [ТС]
Vitall, ха-ха
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
06.02.2012, 18:36
Цитата Сообщение от Vitall Посмотреть сообщение
А где дублирование в моем примере так и не понял
Прошу прощения насчет дублирования - я сразу не заметил, что вы заменили case "лед" на default.
Так, правда, получилось еще хуже, так как с таким подходом будут лететь айсбласты даже если полная ерунда была отправлена

Костяныч, глянул я ваш проект.
Проблема там в том, что вы пытаетесь обратиться к переменной iceBall, которая на тот момент не проинициализированна, в результате чего вылетает NullArgumentException, который успешно глотается вот в этом замечательном кусочке:
C#
1
2
3
4
5
catch
{
 
   //server_on = false;
}
В результате ничего не происходит.
1
774 / 554 / 80
Регистрация: 03.07.2011
Сообщений: 1,020
06.02.2012, 18:41
kolorotur, Так я это предложил только в ответ на ваш вариант переправлять всю туже ерунду в лёд

Цитата Сообщение от kolorotur Посмотреть сообщение
Кстати, вместо рекурсии здесь можно довольно красиво использовать нелюбимый многими goto:
C#
1
default: goto case "лед"; break;
Ладно что спорить все ровно так было проверка ,а не суть gameplay -я
Цитата Сообщение от Костяныч Посмотреть сообщение
Цитата Сообщение от kolorotur Посмотреть сообщение
default: SendKom("лед"); break;
Это я так извращался, проверял как мог)
1
20 / 20 / 4
Регистрация: 31.10.2010
Сообщений: 1,240
Записей в блоге: 2
06.02.2012, 18:47  [ТС]
kolorotur, да NullArgumentException действительно присутствует, но я не понимаю. handler ведь проинициализирован и в него подаются сообщения. А в самом Handler инициализирован IceBall. Или я в чем-то ошибаюсь?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
06.02.2012, 18:47
Помогаю со студенческими работами здесь

Не работают команды switch
блин самая простая и элементарная программа, компилируется без ошибок, но не работает #include &lt;cstdlib&gt; #include...

Как сделать, чтобы после выполнения команды «switch» - «break» код продолжал работать?
Класс &quot;ParserWorker&quot; В &quot;WorkerHTMLFile()&quot; методе перебирает список. Список &quot;ListUrlActive&quot; содержит 4 строки. Метод...

Как сделать чтобы Switch работал в другом Switch'e?
Как сделать что бы Switch работал в другом Switch'e? Вот допустим выбираем один пункт и в зависимости от выбранного нами пункта последующие...

Switch . Как присвоить переменной значение из Switch в default
Добрый день подскажите как реализуется данный код . Как взять значение switch если выпал default ? public int Parse() { int...

Рефакторинг switch внутри switch в static классе
Добрый день. Подскажите, как корректно обойти конструкцию switch case внутри switch case в статическом классе. Наткнулся на stackoverflow...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru