Аватар для zewer
2356 / 1774 / 212
Регистрация: 07.01.2011
Сообщений: 10,342

Неправильная передача данных от клиента серверу

02.06.2014, 00:50. Показов 1173. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Пишу программу на клиент-серверной архитектуре.
Нужно из клиента передать данные на сервер, а сервер должен их принять.
Отправляю данные из клиента вот так:
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
26
private void Connect(Int32 port, string server)
        {
            try
            {
                client = new TcpClient(server, port);//conect to server
                //txt_msg[0] = "Петр Петров Петрович"
                Byte[] data1 = System.Text.Encoding.Unicode.GetBytes(txt_msg[0]);//ПИБ
                //txt_msg[1] = "Москва"
                Byte[] data2 = System.Text.Encoding.Unicode.GetBytes(txt_msg[1]);//Город
 
                NetworkStream stream = client.GetStream();
 
                stream.Write(data1, 0, data1.Length);
 
                stream.Write(data2, 0, data2.Length);
 
            }
            catch (SocketException)
            {
                this.Close();
            }
            finally
            {
                client.Close();
            }
        }
А принимаю вот так:
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
26
27
28
static void Connecting(object client_obj)
        {
            DBConnect DB = new DBConnect();
            Byte[] bytes = new Byte[256];
            string[] txt_msg = new string[2];
            int[] arr = new int[5];
 
            TcpClient client = client_obj as TcpClient;
 
            NetworkStream stream = client.GetStream();
 
            int i;
 
            while ((i = stream.Read(bytes, 0, bytes.Length)) != 0)
            {
                txt_msg[0] = System.Text.Encoding.Unicode.GetString(bytes, 0, i);//Должно записать "Петр Петров Петрович"
            }
 
            while ((i = stream.Read(bytes, 0, bytes.Length)) != 0)
            {
                txt_msg[1] = System.Text.Encoding.Unicode.GetString(bytes, 0, i);//А тут должно быть "Москва"
            }
 
            Console.WriteLine(txt_msg[0] + "\n");//Должно вывести Петро Петров Петрович
            Console.WriteLine(txt_msg[1] + "\n");//Москва
 
            client.Close();
        }
А на самом деле в переменной txt_msg[0] храниться текст "Петр Петров ПетровичМосква", а txt_msg[1] остается пустой.
Подскажите как исправить.

Добавлено через 6 часов 49 минут
Решил проблему тем, что в клиенте в участке кода добавил
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
try
            {
                client = new TcpClient(server, port);//conect to server
                //txt_msg[0] = "Петр Петров Петрович"
                Byte[] data1 = System.Text.Encoding.Unicode.GetBytes(txt_msg[0]);//ПИБ
                //txt_msg[1] = "Москва"
                Byte[] data2 = System.Text.Encoding.Unicode.GetBytes(txt_msg[1]);//Город
 
                NetworkStream stream = client.GetStream();
 
                stream.Write(data1, 0, data1.Length);
 
 
                Thread.Sleep(500);//добавил
 
 
                stream.Write(data2, 0, data2.Length);
 
            }
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
02.06.2014, 00:50
Ответы с готовыми решениями:

Передача архива от клиента к серверу
Клиент скачивает файлы .txt затем их изменяет, но это всё понятно, а ещё нужно что бы клиент отправил файлы серверу( было бы не плохо...

Передача двух переменных разного типа с клиента серверу
Хочу передать переменную типа float и строку типа string с асинхронного клиента на сервер, а затем выполнить с ними определенную работу и...

Передача данных от клиента к серверу
Всем привет! Возникла потребность передавать данные по симметрично-шифрованному соединению. Клиент передает данные(в данном случае...

4
What? Where? Why?
106 / 106 / 32
Регистрация: 16.10.2012
Сообщений: 459
02.06.2014, 01:01
Данные принимаются вместе, потому что у вас размер буфера
C#
1
Byte[] bytes = new Byte[256];
вмещает обе входящие строки. А если вы добавляете Sleep, то просто таймаут на ожидание выходит, и поэтому обрабатывается как новый запрос.
На мой взгляд, если у Вас данные готовы в один момент, то и передавать их стоит вместе, разделив каким нибудь управляющим символом. А на принимающей стороне методом Split разбить эту строку по тому самому управляющему символу, и вставить каждый из фрагментов куда необходимо.
0
 Аватар для zewer
2356 / 1774 / 212
Регистрация: 07.01.2011
Сообщений: 10,342
02.06.2014, 20:32  [ТС]
Цитата Сообщение от Exception Посмотреть сообщение
А если вы добавляете Sleep, то просто таймаут на ожидание выходит, и поэтому обрабатывается как новый запрос.
как новый запрос?
мне кажеться это связано с тем, что 2 передачи в сервере сливаються в одну, а добавив Sleep, сервер на втором чтении будет ждать то что нужно.
0
What? Where? Why?
106 / 106 / 32
Регистрация: 16.10.2012
Сообщений: 459
02.06.2014, 22:18
Цитата Сообщение от zewer Посмотреть сообщение
как новый запрос?
мне кажеться это связано с тем, что 2 передачи в сервере сливаються в одну, а добавив Sleep, сервер на втором чтении будет ждать то что нужно.
У StreamReader есть таймаут, по которому он принимает данные с одного запроса. Не знаю, каков он по умолчанию, но изменять можно так:
C#
1
streamReader.BaseStream.ReadTimeout = 2000;
Вот и получается, что без Sleep все ваши обе строки пролетают при одном считывании, т.к. 256 байт для них хватает более чем. На 256 символов вполне хватит.
А когда ставите слип, то истекает время таймаута и идет новое считывание. Поэтому такие результаты.
0
 Аватар для zewer
2356 / 1774 / 212
Регистрация: 07.01.2011
Сообщений: 10,342
02.06.2014, 23:03  [ТС]
Цитата Сообщение от Exception Посмотреть сообщение
Вот и получается, что без Sleep все ваши обе строки пролетают при одном считывании, т.к. 256 байт для них хватает более чем. На 256 символов вполне хватит.
А когда ставите слип, то истекает время таймаута и идет новое считывание. Поэтому такие результаты.
я с вами согласен, но вы выразились что это новый запрос.
Я не согласен что это новый запрос - это новый поток передачи данных с клиента на сервер
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
02.06.2014, 23:03
Помогаю со студенческими работами здесь

ICallbackEventHandler, передача данных от клиента серверу
Здравтвуйте, в ASP.NET(Ajax) Используется интерфейс ICallbackEventHandler для передачи с сервера на клиент данных А что испольуется в...

Передача данных от клиента серверу через http proxy
Всем, доброго дня. Возникла следующая проблема: как реализовать взаимодействие клиента с сервером через http proxy. Какой нужно включать...

MVC3 JQuery Ajax передача JSON данных от клиента серверу
Код на клиенте $.ajax({url:'@Url.Action( "Index" )', type:'POST', ...

Передача числа от клиента серверу
Клиентская часть: #include <winsock2.h> #include <iostream> #pragma comment(lib, "wsock32.lib") #include <stdlib.h> using...

Передача команд от клиента серверу
В написании 1 программы Которая должна передавать из клиента к серверу комманды , которые в последущее будут запускать определенные...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

Новые блоги и статьи
Angular vs Svelte - что лучше?
Reangularity 09.07.2025
Сегодня рынок разделился на несколько четких категорий: тяжеловесы корпоративного уровня (Angular), гибкие универсалы (React), прогрессивные решения (Vue) и новая волна компилируемых фреймворков. . .
Code First и Database First в Entity Framework
UnmanagedCoder 09.07.2025
Entity Framework дает нам свободу выбора, предлагая как Code First, так и Database First подходы. Но эта свобода порождает вечный вопрос — какой подход выбрать? Entity Framework — это. . .
Как использовать Bluetooth-модуль HC-05 с Arduino
Wired 08.07.2025
Bluetooth - это технология, созданная чтобы заменить кабельные соединения. Обычно ее используют для связи небольших устройств: мобильных телефонов, ноутбуков, наушников и т. д. Работает она на частоте. . .
Руководство по структурам данных Python
AI_Generated 08.07.2025
Я отчетливо помню свои первые серьезные проекты на Python - я писал код, он работал, заказчики были относительно довольны. Но однажды мой наставник, взглянув на мою реализацию поиска по огромному. . .
Тестирование энергоэффективности и скорости вычислений видеокарт в BOINC проектах
Programma_Boinc 08.07.2025
Тестирование энергоэффективности и скорости вычислений видеокарт в BOINC проектах Опубликовано: 07. 07. 2025 Рубрика: Uncategorized Автор: AlexA Статья размещается на сайте с разрешения. . .
Раскрываем внутренние механики Android с помощью контекста и манифеста
mobDevWorks 07.07.2025
Каждый Android-разработчик сталкивается с Context и манифестом буквально в первый день работы. Но много ли мы задумываемся о том, что скрывается за этими обыденными элементами? Я, честно говоря,. . .
API на базе FastAPI с Python за пару минут
AI_Generated 07.07.2025
FastAPI - это относительно молодой фреймворк для создания веб-API, который за короткое время заработал бешеную популярность в Python-сообществе. И не зря. Я помню, как впервые запустил приложение на. . .
Основы WebGL. Раскрашивание вершин с помощью VBO
8Observer8 05.07.2025
На русском https:/ / vkvideo. ru/ video-231374465_456239020 На английском https:/ / www. youtube. com/ watch?v=oskqtCrWns0 Исходники примера:
Мониторинг микросервисов с OpenTelemetry в Kubernetes
Mr. Docker 04.07.2025
Проблема наблюдаемости (observability) в Kubernetes - это не просто вопрос сбора логов или метрик. Это целый комплекс вызовов, которые возникают из-за самой природы контейнеризации и оркестрации. К. . .
Проблемы с Kotlin и Wasm при создании игры
GameUnited 03.07.2025
В современном мире разработки игр выбор технологии - это зачастую балансирование между удобством разработки, переносимостью и производительностью. Когда я решил создать свою первую веб-игру, мой. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru